{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/jeshraghian/snntorch/blob/master/examples/dataset_examples/SNN_Tutorial_Derrick_Lee.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "[<img src='https://github.com/jeshraghian/snntorch/blob/master/docs/_static/img/snntorch_alpha_w.png?raw=true' width=\"400\">](https://github.com/jeshraghian/snntorch/)\n",
        "\n",
        "\n",
        "# snnTorch - Training Spiking Neural Networks with snnTorch\n",
        "### By Derrick Lee\n",
        "\n",
        "\n"
      ],
      "metadata": {
        "id": "LPxYaNwaj6zk"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "The snnTorch tutorial series is based on the following paper. If you find these resources or code useful in your work, please consider citing the following source:\n",
        "\n",
        "> <cite> [Jason K. Eshraghian, Max Ward, Emre Neftci, Xinxin Wang, Gregor Lenz, Girish Dwivedi, Mohammed Bennamoun, Doo Seok Jeong, and Wei D. Lu. \"Training Spiking Neural Networks Using Lessons From Deep Learning\". Proceedings of the IEEE, 111(9) September 2023.](https://ieeexplore.ieee.org/abstract/document/10242251) </cite>\n"
      ],
      "metadata": {
        "id": "2KZ5Jo9mkd_y"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "\n",
        "## Introduction\n",
        "In this tutorial you will learn how to:\n",
        "\n",
        "* Train a spiking convolutional SNN\n",
        "* Construct a dataloader using [Tonic](https://tonic.readthedocs.io/en/latest/#)\n",
        "* To train a model on the [DVS Gesture Dataset](https://research.ibm.com/interactive/dvsgesture/)\n",
        "\n",
        "If running in Google Colab:\n",
        "* You may connect to GPU by checking `Runtime` > `Change runtime type` > `Hardware accelerator: GPU`\n",
        "* Next, install the latest PyPi distribution of snnTorch by clicking into the following cell and pressing `Shift+Enter`."
      ],
      "metadata": {
        "id": "AEIyFscwk9Cx"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "KJAF2tZPvPMk",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "d6e97bb2-0133-4dcd-c5bb-0f6801dd3b80"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m109.7/109.7 kB\u001b[0m \u001b[31m3.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m107.5/107.5 kB\u001b[0m \u001b[31m7.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m50.4/50.4 kB\u001b[0m \u001b[31m6.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m109.0/109.0 kB\u001b[0m \u001b[31m1.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h"
          ]
        }
      ],
      "source": [
        "!pip install tonic --quiet\n",
        "!pip install snntorch --quiet"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# imports\n",
        "import tonic\n",
        "import matplotlib.pyplot as plt\n",
        "import tonic.transforms as transforms\n",
        "\n",
        "import torch\n",
        "import torchvision\n",
        "\n",
        "import snntorch as snn\n",
        "from snntorch import surrogate\n",
        "from snntorch import functional as SF\n",
        "from snntorch import utils\n",
        "import torch.nn as nn\n",
        "\n",
        "device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\"mps\") if torch.backends.mps.is_available() else torch.device(\"cpu\")"
      ],
      "metadata": {
        "id": "C9F9ihlGls9u"
      },
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# 1. Dataset"
      ],
      "metadata": {
        "id": "IRW_OSVfmMF1"
      }
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "T-KcsehPANDP"
      },
      "source": [
        "The dataset used in this tutorial will be DVSGesture from IBM.\n",
        "\\\n",
        "This dataset is comprised of 11 classes, where each corresponds to a hand gesture, like waving or clapping. All events were recorded on a DVS128 camera, which is a vision sensor that captures changes in the environment (events), represented by illuminated pixels, while static backdrops are ignored or produce little noise.\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "L9ALJIrHL7AW"
      },
      "source": [
        "## 1.1 Loading the dataset with Tonic"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 86,
          "referenced_widgets": [
            "ab87bfd9c02540f58c277f34bf624b84",
            "449eecdf6da24230adc13f0316e005a4",
            "c1964cca2dd34ee6adeebc592d3d0e8f",
            "a310e770aace454686dc70c1e6f04474",
            "61016fb4e16346f7a12a03f2a5a5c669",
            "5f23795f6bc44987bb3f81ac428b0356",
            "8041b1851a1e462d94c0eb24963d4a6a",
            "322859851f804d67a53b357e63a8227e",
            "44fa051f61a14aef894a656887ea3f28",
            "8d0fa726820b47698b80e8eb31b7be41",
            "c9285a1279ce44b3ba3ad73f70c6c86f"
          ]
        },
        "id": "peDXjxJUwEVX",
        "outputId": "d65336a9-37a1-4f15-f9d8-2f404d8fa21e"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Downloading https://s3-eu-west-1.amazonaws.com/pfigshare-u-files/38022171/ibmGestureTrain.tar.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIYCQYOYV5JSSROOA/20231107/eu-west-1/s3/aws4_request&X-Amz-Date=20231107T212148Z&X-Amz-Expires=10&X-Amz-SignedHeaders=host&X-Amz-Signature=ceb2bd6df9661156db57c6d97af632ba756bd128bab1757a48835be033fb3dcc to ./data/DVSGesture/ibmGestureTrain.tar.gz\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "  0%|          | 0/2443675558 [00:00<?, ?it/s]"
            ],
            "application/vnd.jupyter.widget-view+json": {
              "version_major": 2,
              "version_minor": 0,
              "model_id": "ab87bfd9c02540f58c277f34bf624b84"
            }
          },
          "metadata": {}
        }
      ],
      "source": [
        "dataset = tonic.datasets.DVSGesture(save_to='./data', train=True)\n",
        "events, label = dataset[0]\n",
        "\n",
        "# Dataset size\n",
        "print(\"Dataset contains \", len(dataset), \" samples.\")\n",
        "\n",
        "# Number of events in the first sample\n",
        "print(\"There are \", len(events), \" events in the first sample.\")\n",
        "\n",
        "# (x-pos, y-pos, polarity, timestamp)\n",
        "print(\"A single event: \", events[0])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZSTk0p-HQUPk"
      },
      "source": [
        "## 1.2 Visualizing the Data"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "tIUgiH4z52IC"
      },
      "outputs": [],
      "source": [
        "# This is not necessary, but is cool to see\n",
        "# Converting 1000 event blocks into frames with tonic.transforms.ToFrame\n",
        "sensor_size = tonic.datasets.DVSGesture.sensor_size\n",
        "frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, event_count=1000)\n",
        "\n",
        "# Applying the transform to the raw events array\n",
        "frames = frame_transform(events)\n",
        "\n",
        "# Shape of the frames object represents (num frames, polarity, width, height)\n",
        "print(frames.shape)\n",
        "\n",
        "# Plot some frames\n",
        "fig, ax = plt.subplots(1, 3)\n",
        "ax[0].axis('off')\n",
        "ax[1].axis('off')\n",
        "ax[2].axis('off')\n",
        "ax[0].imshow(frames[0][0])\n",
        "ax[1].imshow(frames[10][0])\n",
        "ax[2].imshow(frames[20][0])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "F2zffSFnmJaz"
      },
      "source": [
        "# 2. Transforming the Raw Data"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EroKAOeGmXzx"
      },
      "source": [
        "## 2.1 Transforms\n",
        "A neural network takes in a tensor as input, so the event array must be transformed into a suitable format.\n",
        "\\\n",
        "The following code bins events into 1ms groups and denoises each group, or frame. These transforms are then applied to the train and test sets before being passed into dataloaders, which efficiently preprocess the data before passing it into the network."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "RPRswuWZ2tr4"
      },
      "outputs": [],
      "source": [
        "size = tonic.datasets.DVSGesture.sensor_size\n",
        "\n",
        "# Denoise transform removes outlier events with inactive surrounding pixels for 10ms\n",
        "denoise_transform = transforms.Denoise(filter_time=10000)\n",
        "\n",
        "# ToFrame transform bins events into 25 clusters of frames\n",
        "frame_transform = transforms.ToFrame(sensor_size=size, n_time_bins=25)\n",
        "\n",
        "# Chain the transforms\n",
        "all_transform = transforms.Compose([denoise_transform, frame_transform])\n",
        "\n",
        "# View the transformed data\n",
        "tf_frames = all_transform(events)\n",
        "print(\"Shape of frames object: \", tf_frames.shape)\n",
        "plt.axis('off')\n",
        "plt.imshow(tf_frames[0][0])\n",
        "\n",
        "train_set = tonic.datasets.DVSGesture(save_to='./data', transform=all_transform, train=True)\n",
        "test_set = tonic.datasets.DVSGesture(save_to='./data', transform=all_transform, train=False)\n",
        "print(len(train_set))\n",
        "print(len(test_set))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "elh6NQrnpwFl"
      },
      "source": [
        "## 2.2 Caching and Dataloaders\n",
        "- To optimize and expedite the training process, caching and dataloaders are helpful.\n",
        "- A dataloader efficiently prepares data for iteration through shuffling, batch size processing, etc.\n",
        "- Caching the dataset makes iterating through the dataloader much faster, as samples are read from the cache rather than from the disk."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "LIZvmu6RgUuT"
      },
      "outputs": [],
      "source": [
        "cached_trainset = tonic.DiskCachedDataset(train_set, cache_path='./cache/dvsgesture/train')\n",
        "cached_testset = tonic.DiskCachedDataset(test_set, cache_path='./cache/dvsgesture/test')\n",
        "\n",
        "# Create DataLoaders\n",
        "train_loader = torch.utils.data.DataLoader(cached_trainset, batch_size=64, shuffle=True, drop_last=True, collate_fn=tonic.collation.PadTensors(batch_first=False))\n",
        "test_loader = torch.utils.data.DataLoader(cached_testset, batch_size=32, shuffle=True, drop_last=True, collate_fn=tonic.collation.PadTensors(batch_first=False))\n",
        "\n",
        "# Visualize shape of sample in dataloader (similar to frames object above, but 2nd element is batch size)\n",
        "for sample in iter(train_loader):\n",
        "  print(\"Shape of sample object: \", sample[0].shape)\n",
        "  break"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "b08XtlkJeUAO"
      },
      "source": [
        "# 3. Building the Network"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ilBQ1RCCW5oZ"
      },
      "source": [
        "The network will be fairly simple; 2 convolution layers with 5 filters each, followed by a fully connected layer."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "cMT7KY2d301F"
      },
      "outputs": [],
      "source": [
        "device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\"cpu\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "7TBtMTdLfy-P"
      },
      "outputs": [],
      "source": [
        "# Network parameters\n",
        "gradient = surrogate.fast_sigmoid(slope=25)\n",
        "beta = 0.5\n",
        "\n",
        "# Initializing the network\n",
        "net = nn.Sequential(nn.Conv2d(2, 12, 5),\n",
        "                    nn.MaxPool2d(2),\n",
        "                    snn.Leaky(beta=beta, spike_grad=gradient, init_hidden=True),\n",
        "                    nn.Conv2d(12, 32, 5),\n",
        "                    nn.MaxPool2d(2),\n",
        "                    snn.Leaky(beta=beta, spike_grad=gradient, init_hidden=True),\n",
        "                    nn.Flatten(),\n",
        "                    nn.Linear(800, 11),\n",
        "                    snn.Leaky(beta=beta, spike_grad=gradient, init_hidden=True, output=True)\n",
        "                    ).to(device)"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# Define Network\n",
        "class Net(nn.Module):\n",
        "    def __init__(self):\n",
        "        super().__init__()\n",
        "\n",
        "        # Initialize layers\n",
        "        self.conv1 = nn.Conv2d(2, 12, 5)\n",
        "        self.lif1 = snn.Leaky(beta=beta)\n",
        "        self.conv2 = nn.Conv2d(12, 32, 5)\n",
        "        self.lif2 = snn.Leaky(beta=beta)\n",
        "        self.fc1 = nn.Linear(800, 11)\n",
        "        self.lif3 = snn.Leaky(beta=beta)\n",
        "\n",
        "    def forward(self, x):\n",
        "\n",
        "        # Initialize hidden states and outputs at t=0\n",
        "        mem1 = self.lif1.init_leaky()\n",
        "        mem2 = self.lif2.init_leaky()\n",
        "        mem3 = self.lif3.init_leaky()\n",
        "\n",
        "        mem_rec = []\n",
        "        spk_rec = []\n",
        "\n",
        "        for step in range(num_steps):\n",
        "\n",
        "          cur1 = F.max_pool2d(self.conv1(x[step]), 2)\n",
        "          spk1, mem1 = self.lif1(cur1, mem1)\n",
        "\n",
        "          cur2 = F.max_pool2d(self.conv2(spk1), 2)\n",
        "          spk2, mem2 = self.lif2(cur2, mem2)\n",
        "\n",
        "          cur3 = self.fc1(spk2.flatten(1)) # batch x ....\n",
        "          spk3, mem3 = self.lif3(cur3, mem3)\n",
        "\n",
        "          spk_rec.append(spk3)\n",
        "          mem_rec.append(mem3)\n",
        "\n",
        "        return spk3, mem3"
      ],
      "metadata": {
        "id": "jZ5mBQOzpxK2"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 3.1 Forward Propagation\n",
        "\n",
        "Since the samples can be interpreted as a short video of 25 frames, a custom forward propagation function helps feed each frame, or cluster of events, into the network one at a time.\n",
        "\n",
        "- In this case, data.size(0) == 25.\n",
        "\n",
        "A single forward pass returns a tensor representing the spiking activity from one sample (or batch if batch size > 1).\n",
        "\n",
        "This should be of size (frame count, batch size, num classes), or (25, 64, 11)."
      ],
      "metadata": {
        "id": "kwOY2WJ0da_z"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# Defining a forward propagation function\n",
        "def forward_pass(net, data):\n",
        "  spk_rec = []\n",
        "  snn.utils.reset(net)\n",
        "  for step in range(data.size(0)):\n",
        "      spk_out, mem_out = net(data[step])\n",
        "      spk_rec.append(spk_out)\n",
        "  return torch.stack(spk_rec)"
      ],
      "metadata": {
        "id": "rOoGQW6Wdbwr"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "CpiF5fUl3d-B"
      },
      "outputs": [],
      "source": [
        "# some hyperparameters\n",
        "optimizer = torch.optim.Adam(net.parameters(), lr=0.002, betas=(0.9, 0.999))\n",
        "loss_fn = SF.mse_count_loss(correct_rate=0.8, incorrect_rate=0.2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "C0adurQH-bw3"
      },
      "source": [
        "# 4. Training"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "Note: Dataloading will be slow for the first (num samples/batch size) training steps due to first time loading into the cache"
      ],
      "metadata": {
        "id": "UdgXx_9VXp74"
      }
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_2T7HO4m3eXL",
        "outputId": "49505b99-6af7-47b7-93d1-011ec4d5d790"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 0, Iteration 0 \n",
            "Train Loss: 2.36\n",
            "Train Accuracy: 10.94%\n",
            "\n",
            "========== Test Set Accuracy: 8.98% ==========\n",
            "\n",
            "Epoch 1, Iteration 0 \n",
            "Train Loss: 1.28\n",
            "Train Accuracy: 29.69%\n",
            "\n",
            "========== Test Set Accuracy: 35.16% ==========\n",
            "\n",
            "Epoch 2, Iteration 0 \n",
            "Train Loss: 0.93\n",
            "Train Accuracy: 65.62%\n",
            "\n",
            "========== Test Set Accuracy: 58.20% ==========\n",
            "\n",
            "Epoch 3, Iteration 0 \n",
            "Train Loss: 0.72\n",
            "Train Accuracy: 50.00%\n",
            "\n",
            "========== Test Set Accuracy: 60.16% ==========\n",
            "\n",
            "Epoch 4, Iteration 0 \n",
            "Train Loss: 0.62\n",
            "Train Accuracy: 57.81%\n",
            "\n",
            "========== Test Set Accuracy: 61.33% ==========\n",
            "\n",
            "Epoch 5, Iteration 0 \n",
            "Train Loss: 0.57\n",
            "Train Accuracy: 70.31%\n",
            "\n",
            "========== Test Set Accuracy: 65.23% ==========\n",
            "\n",
            "Epoch 6, Iteration 0 \n",
            "Train Loss: 0.45\n",
            "Train Accuracy: 71.88%\n",
            "\n",
            "========== Test Set Accuracy: 64.45% ==========\n",
            "\n",
            "Epoch 7, Iteration 0 \n",
            "Train Loss: 0.45\n",
            "Train Accuracy: 71.88%\n",
            "\n",
            "========== Test Set Accuracy: 64.84% ==========\n",
            "\n",
            "Epoch 8, Iteration 0 \n",
            "Train Loss: 0.38\n",
            "Train Accuracy: 84.38%\n",
            "\n",
            "========== Test Set Accuracy: 66.80% ==========\n",
            "\n",
            "Epoch 9, Iteration 0 \n",
            "Train Loss: 0.46\n",
            "Train Accuracy: 70.31%\n",
            "\n",
            "========== Test Set Accuracy: 64.84% ==========\n",
            "\n",
            "Epoch 10, Iteration 0 \n",
            "Train Loss: 0.40\n",
            "Train Accuracy: 73.44%\n",
            "\n",
            "========== Test Set Accuracy: 74.22% ==========\n",
            "\n",
            "Epoch 11, Iteration 0 \n",
            "Train Loss: 0.44\n",
            "Train Accuracy: 79.69%\n",
            "\n",
            "========== Test Set Accuracy: 73.83% ==========\n",
            "\n",
            "Epoch 12, Iteration 0 \n",
            "Train Loss: 0.36\n",
            "Train Accuracy: 81.25%\n",
            "\n",
            "========== Test Set Accuracy: 69.92% ==========\n",
            "\n",
            "Epoch 13, Iteration 0 \n",
            "Train Loss: 0.39\n",
            "Train Accuracy: 81.25%\n",
            "\n",
            "========== Test Set Accuracy: 72.66% ==========\n",
            "\n",
            "Epoch 14, Iteration 0 \n",
            "Train Loss: 0.38\n",
            "Train Accuracy: 82.81%\n",
            "\n",
            "========== Test Set Accuracy: 73.83% ==========\n",
            "\n",
            "Epoch 15, Iteration 0 \n",
            "Train Loss: 0.33\n",
            "Train Accuracy: 90.62%\n",
            "\n",
            "========== Test Set Accuracy: 78.91% ==========\n",
            "\n",
            "Epoch 16, Iteration 0 \n",
            "Train Loss: 0.34\n",
            "Train Accuracy: 89.06%\n",
            "\n",
            "========== Test Set Accuracy: 78.52% ==========\n",
            "\n",
            "Epoch 17, Iteration 0 \n",
            "Train Loss: 0.28\n",
            "Train Accuracy: 89.06%\n",
            "\n",
            "========== Test Set Accuracy: 76.95% ==========\n",
            "\n",
            "Epoch 18, Iteration 0 \n",
            "Train Loss: 0.33\n",
            "Train Accuracy: 92.19%\n",
            "\n",
            "========== Test Set Accuracy: 82.42% ==========\n",
            "\n",
            "Epoch 19, Iteration 0 \n",
            "Train Loss: 0.31\n",
            "Train Accuracy: 90.62%\n",
            "\n",
            "========== Test Set Accuracy: 82.42% ==========\n",
            "\n",
            "Epoch 20, Iteration 0 \n",
            "Train Loss: 0.29\n",
            "Train Accuracy: 93.75%\n",
            "\n",
            "========== Test Set Accuracy: 79.69% ==========\n",
            "\n",
            "Epoch 21, Iteration 0 \n",
            "Train Loss: 0.31\n",
            "Train Accuracy: 90.62%\n",
            "\n",
            "========== Test Set Accuracy: 84.38% ==========\n",
            "\n",
            "Epoch 22, Iteration 0 \n",
            "Train Loss: 0.29\n",
            "Train Accuracy: 92.19%\n",
            "\n",
            "========== Test Set Accuracy: 81.64% ==========\n",
            "\n",
            "Epoch 23, Iteration 0 \n",
            "Train Loss: 0.31\n",
            "Train Accuracy: 90.62%\n",
            "\n",
            "========== Test Set Accuracy: 85.55% ==========\n",
            "\n",
            "Epoch 24, Iteration 0 \n",
            "Train Loss: 0.26\n",
            "Train Accuracy: 92.19%\n",
            "\n",
            "========== Test Set Accuracy: 84.77% ==========\n",
            "\n",
            "Epoch 25, Iteration 0 \n",
            "Train Loss: 0.21\n",
            "Train Accuracy: 92.19%\n",
            "\n",
            "========== Test Set Accuracy: 86.72% ==========\n",
            "\n",
            "Epoch 26, Iteration 0 \n",
            "Train Loss: 0.23\n",
            "Train Accuracy: 96.88%\n",
            "\n",
            "========== Test Set Accuracy: 85.94% ==========\n",
            "\n",
            "Epoch 27, Iteration 0 \n",
            "Train Loss: 0.20\n",
            "Train Accuracy: 95.31%\n",
            "\n",
            "========== Test Set Accuracy: 83.20% ==========\n",
            "\n",
            "Epoch 28, Iteration 0 \n",
            "Train Loss: 0.27\n",
            "Train Accuracy: 92.19%\n",
            "\n",
            "========== Test Set Accuracy: 87.11% ==========\n",
            "\n",
            "Epoch 29, Iteration 0 \n",
            "Train Loss: 0.28\n",
            "Train Accuracy: 93.75%\n",
            "\n",
            "========== Test Set Accuracy: 83.98% ==========\n",
            "\n",
            "Epoch 30, Iteration 0 \n",
            "Train Loss: 0.22\n",
            "Train Accuracy: 93.75%\n",
            "\n",
            "========== Test Set Accuracy: 86.33% ==========\n",
            "\n",
            "Epoch 31, Iteration 0 \n",
            "Train Loss: 0.16\n",
            "Train Accuracy: 100.00%\n",
            "\n",
            "========== Test Set Accuracy: 83.59% ==========\n",
            "\n",
            "Epoch 32, Iteration 0 \n",
            "Train Loss: 0.21\n",
            "Train Accuracy: 96.88%\n",
            "\n",
            "========== Test Set Accuracy: 85.94% ==========\n",
            "\n",
            "Epoch 33, Iteration 0 \n",
            "Train Loss: 0.23\n",
            "Train Accuracy: 95.31%\n",
            "\n",
            "========== Test Set Accuracy: 85.55% ==========\n",
            "\n",
            "Epoch 34, Iteration 0 \n",
            "Train Loss: 0.22\n",
            "Train Accuracy: 96.88%\n",
            "\n",
            "========== Test Set Accuracy: 85.16% ==========\n",
            "\n",
            "Epoch 35, Iteration 0 \n",
            "Train Loss: 0.19\n",
            "Train Accuracy: 96.88%\n",
            "\n",
            "========== Test Set Accuracy: 85.94% ==========\n",
            "\n",
            "Epoch 36, Iteration 0 \n",
            "Train Loss: 0.15\n",
            "Train Accuracy: 98.44%\n",
            "\n",
            "========== Test Set Accuracy: 85.16% ==========\n",
            "\n",
            "Epoch 37, Iteration 0 \n",
            "Train Loss: 0.18\n",
            "Train Accuracy: 98.44%\n",
            "\n",
            "========== Test Set Accuracy: 85.94% ==========\n",
            "\n",
            "Epoch 38, Iteration 0 \n",
            "Train Loss: 0.18\n",
            "Train Accuracy: 95.31%\n",
            "\n",
            "========== Test Set Accuracy: 85.94% ==========\n",
            "\n",
            "Epoch 39, Iteration 0 \n",
            "Train Loss: 0.17\n",
            "Train Accuracy: 98.44%\n",
            "\n",
            "========== Test Set Accuracy: 86.72% ==========\n",
            "\n",
            "Epoch 40, Iteration 0 \n",
            "Train Loss: 0.15\n",
            "Train Accuracy: 95.31%\n",
            "\n",
            "========== Test Set Accuracy: 87.11% ==========\n",
            "\n",
            "Epoch 41, Iteration 0 \n",
            "Train Loss: 0.16\n",
            "Train Accuracy: 96.88%\n",
            "\n",
            "========== Test Set Accuracy: 85.55% ==========\n",
            "\n",
            "Epoch 42, Iteration 0 \n",
            "Train Loss: 0.23\n",
            "Train Accuracy: 96.88%\n",
            "\n",
            "========== Test Set Accuracy: 86.72% ==========\n",
            "\n",
            "Epoch 43, Iteration 0 \n",
            "Train Loss: 0.18\n",
            "Train Accuracy: 95.31%\n",
            "\n",
            "========== Test Set Accuracy: 83.98% ==========\n",
            "\n",
            "Epoch 44, Iteration 0 \n",
            "Train Loss: 0.19\n",
            "Train Accuracy: 95.31%\n",
            "\n",
            "========== Test Set Accuracy: 85.55% ==========\n",
            "\n",
            "Epoch 45, Iteration 0 \n",
            "Train Loss: 0.16\n",
            "Train Accuracy: 98.44%\n",
            "\n",
            "========== Test Set Accuracy: 85.55% ==========\n",
            "\n",
            "Epoch 46, Iteration 0 \n",
            "Train Loss: 0.16\n",
            "Train Accuracy: 98.44%\n",
            "\n",
            "========== Test Set Accuracy: 87.11% ==========\n",
            "\n",
            "Epoch 47, Iteration 0 \n",
            "Train Loss: 0.14\n",
            "Train Accuracy: 98.44%\n",
            "\n",
            "========== Test Set Accuracy: 86.33% ==========\n",
            "\n",
            "Epoch 48, Iteration 0 \n",
            "Train Loss: 0.14\n",
            "Train Accuracy: 98.44%\n",
            "\n",
            "========== Test Set Accuracy: 88.28% ==========\n",
            "\n",
            "Epoch 49, Iteration 0 \n",
            "Train Loss: 0.19\n",
            "Train Accuracy: 96.88%\n",
            "\n",
            "========== Test Set Accuracy: 85.94% ==========\n",
            "\n"
          ]
        }
      ],
      "source": [
        "# 50 epochs; counter just used for test set validation\n",
        "num_epochs = 50\n",
        "counter = 0\n",
        "\n",
        "loss_hist = []\n",
        "acc_hist = []\n",
        "test_acc_hist = []\n",
        "\n",
        "# Training loop\n",
        "for epoch in range(num_epochs):\n",
        "    for i, (data, targets) in enumerate(iter(train_loader)):\n",
        "        # Downsampling image from (128 x 128) to (32 x 32)\n",
        "        data = nn.functional.interpolate(data, size=(2, 32, 32))\n",
        "        data = data.to(device)\n",
        "        targets = targets.to(device)\n",
        "\n",
        "        net.train()\n",
        "        # propagating one batch through the network and evaluating loss\n",
        "        spk_rec = forward_pass(net, data)\n",
        "        loss_val = loss_fn(spk_rec, targets)\n",
        "\n",
        "        # Gradient calculation + weight update\n",
        "        optimizer.zero_grad()\n",
        "        loss_val.backward()\n",
        "        optimizer.step()\n",
        "\n",
        "        # Store loss history for future plotting\n",
        "        loss_hist.append(loss_val.item())\n",
        "\n",
        "        acc = SF.accuracy_rate(spk_rec, targets)\n",
        "        acc_hist.append(acc)\n",
        "\n",
        "        # print metrics every so often\n",
        "        if counter % 16 == 0:\n",
        "          print(f\"Epoch {epoch}, Iteration {i} \\nTrain Loss: {loss_val.item():.2f}\")\n",
        "          print(f\"Train Accuracy: {acc * 100:.2f}%\\n\")\n",
        "\n",
        "          correct = 0\n",
        "          total = 0\n",
        "\n",
        "          for i, (data, targets) in enumerate(iter(test_loader)):\n",
        "            data = nn.functional.interpolate(data, size=(2, 32, 32))\n",
        "            data = data.to(device)\n",
        "            targets = targets.to(device)\n",
        "            spk_rec = forward_pass(net, data)\n",
        "            correct += SF.accuracy_rate(spk_rec, targets) * spk_rec.size(1)\n",
        "            total += spk_rec.size(1)\n",
        "\n",
        "          test_acc = (correct/total) * 100\n",
        "          test_acc_hist.append(test_acc)\n",
        "          print(f\"========== Test Set Accuracy: {test_acc:.2f}% ==========\\n\")\n",
        "\n",
        "        counter += 1"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# 5. Results"
      ],
      "metadata": {
        "id": "iPImE6gMmgza"
      }
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "S0_GFlUe-vax"
      },
      "source": [
        "Plotting the accuracy on the training set, loss, and test set accuracy can help visualize how well the model is performing.\n",
        "As we can see from the plots below, loss is converging and train/test accuracy is plateauing accordingly."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JnYIf5CKKYzq",
        "outputId": "89e082d0-6bb1-4cce-e236-170094889ef6"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1800x400 with 3 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABboAAAGJCAYAAABMwIUEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADqi0lEQVR4nOzdd3hT5dsH8G92996lizLKHmVvkCFLpgMQEQeKoCK+DhygKPJzI4rgBGQIogwVZYvIHmXvQkuhu5RumjbJef8oSbOblLZpy/dzXb1sznwSkOfkPve5b5EgCAKIiIiIiIiIiIiIiOoosaMHQERERERERERERER0NxjoJiIiIiIiIiIiIqI6jYFuIiIiIiIiIiIiIqrTGOgmIiIiIiIiIiIiojqNgW4iIiIiIiIiIiIiqtMY6CYiIiIiIiIiIiKiOo2BbiIiIiIiIiIiIiKq0xjoJiIiIiIiIiIiIqI6jYFuIiIiIiIiIiIiIqrTGOgmqkaPP/44IiMjHT0MIiIiIiIiIqrlRCIR3nnnHUcPg6jOYqCb7kkikcimn927dzt6qCYSExMxefJkREdHw8nJCUFBQejVqxfmzJlTqeP99ddflZ5IO3XqBJFIhMWLF1dqfyIiInvU5PxdVFSEd955x65jcY4mIiKqfsuWLYNIJMLRo0cdPRSr3nnnHYhEImRlZZldHxkZiWHDht31eVavXo0FCxbc9XGI6gORIAiCowdBVNNWrlxp8Pqnn37C9u3bsWLFCoPlAwYMQGBgYKXPU1paCo1GA4VCUelj6IuPj0fHjh3h7OyMJ554ApGRkUhNTUVcXBz+/vtvFBcX233M6dOnY9GiRbD3n4LLly+jSZMmiIyMRGhoKPbu3Wv3uYmIiOxRU/M3AGRlZcHf3x9z5syxKdjMOZqIiKhmLFu2DJMnT8aRI0fQoUMHRw/HonfeeQfvvvsuMjMz4efnZ7I+MjISLVu2xJ9//qlbVlxcDKlUCqlUavN5hg0bhjNnziAxMbEqhk1Up9n+fw5RPfLoo48avD548CC2b99ustxYUVERXFxcbD6PTCar1Pgs+fzzz1FQUIATJ04gIiLCYF1GRkaVnqsiK1euREBAAD799FOMHTsWiYmJtbJMi0ajQUlJCZycnBw9FCIiukuVnb9rAudo+3GOJiIiMlRb5kSVSgWNRgO5XO7ooRDZhaVLiCzo06cPWrZsiWPHjqFXr15wcXHBG2+8AQDYtGkThg4dipCQECgUCkRHR+O9996DWq02OIZxje7ExESIRCJ88skn+PbbbxEdHQ2FQoGOHTviyJEjFY7pypUraNCggckXaAAICAgwWfb333+jZ8+ecHV1hbu7O4YOHYqzZ88ajG/RokUADB8Ht8Xq1asxduxYDBs2DJ6enli9erXZ7Q4dOoQhQ4bA29sbrq6uaN26Nb744guDbS5cuICHHnoI/v7+cHZ2RtOmTfHmm28ajNPcF3Tto2D6RCIRpk+fjlWrVqFFixZQKBTYsmULAOCTTz5Bt27d4OvrC2dnZ8TGxuLXX381O+6VK1eiU6dOcHFxgbe3N3r16oVt27YBACZNmgQ/Pz+Ulpaa7Ddw4EA0bdrU8gdHRETVSqPRYMGCBWjRogWcnJwQGBiIZ555Brdu3TLY7ujRoxg0aBD8/Pzg7OyMqKgoPPHEEwDK5mt/f38AwLvvvqubH61ldnOONsQ5moiIHO348eMYPHgwPDw84Obmhvvuuw8HDx402Ka0tBTvvvsuGjduDCcnJ/j6+qJHjx7Yvn27bpu0tDRMnjwZDRo0gEKhQHBwMEaMGFEtGdTG1xv5+fmYMWMGIiMjoVAoEBAQgAEDBiAuLg5AWdxi8+bNuHbtmu5aQX9ezsjIwJNPPonAwEA4OTmhTZs2WL58ucE59eMUCxYs0MUpDh8+DFdXV7z44osm47xx4wYkEgnmz59f5Z8B0d1gRjeRFTdv3sTgwYPxyCOP4NFHH9U9Br1s2TK4ublh5syZcHNzw65duzB79mzk5eXh448/rvC4q1evRn5+Pp555hmIRCJ89NFHGD16NK5evWo1CzwiIgI7duzArl270K9fP6vnWLFiBSZNmoRBgwbhww8/RFFRERYvXowePXrg+PHjiIyMxDPPPIOUlBSzj31bc+jQIcTHx2Pp0qWQy+UYPXo0Vq1apbsRoLV9+3YMGzYMwcHBePHFFxEUFITz58/jzz//1E2Wp06dQs+ePSGTyTBlyhRERkbiypUr+OOPPzBv3jybx6Rv165d+OWXXzB9+nT4+fnpJvovvvgCDzzwACZMmICSkhKsWbMGDz74IP78808MHTpUt/+7776Ld955B926dcPcuXMhl8tx6NAh7Nq1CwMHDsTEiRPx008/YevWrQY11dLS0rBr165K12IlIqK798wzz+geaX7hhReQkJCAr776CsePH8e+ffsgk8mQkZGBgQMHwt/fH6+//jq8vLyQmJiI9evXAwD8/f2xePFiTJ06FaNGjcLo0aMBAK1bt7Z4Xs7RtuEcTURENeHs2bPo2bMnPDw88Oqrr0Imk+Gbb75Bnz598O+//6Jz584Aym7Mzp8/H0899RQ6deqEvLw8HD16FHFxcRgwYAAAYMyYMTh79iyef/55REZGIiMjA9u3b0dSUpJNT0xlZ2ebXa7RaCrc99lnn8Wvv/6K6dOno3nz5rh58yb27t2L8+fPo3379njzzTeRm5uLGzdu4PPPPwcAuLm5AQBu376NPn36ID4+HtOnT0dUVBTWrVuHxx9/HDk5OSYB7KVLl6K4uBhTpkyBQqFAeHg4Ro0ahbVr1+Kzzz6DRCLRbfvzzz9DEARMmDChwvdAVKMEIhKmTZsmGP/v0Lt3bwGAsGTJEpPti4qKTJY988wzgouLi1BcXKxbNmnSJCEiIkL3OiEhQQAg+Pr6CtnZ2brlmzZtEgAIf/zxh9VxnjlzRnB2dhYACG3bthVefPFFYePGjUJhYaHBdvn5+YKXl5fw9NNPGyxPS0sTPD09DZabe+8VmT59uhAWFiZoNBpBEARh27ZtAgDh+PHjum1UKpUQFRUlRERECLdu3TLYX7ufIAhCr169BHd3d+HatWsWtzH+HLXmzJljMnYAglgsFs6ePWuyvfGfW0lJidCyZUuhX79+umWXL18WxGKxMGrUKEGtVpsdk1qtFho0aCA8/PDDBus/++wzQSQSCVevXjU5NxERVT3jOey///4TAAirVq0y2G7Lli0Gyzds2CAAEI4cOWLx2JmZmQIAYc6cOTaNhXO0Ic7RRERUXZYuXVrhPD5y5EhBLpcLV65c0S1LSUkR3N3dhV69eumWtWnTRhg6dKjF49y6dUsAIHz88cd2j1M7F1r7MT638bWHp6enMG3aNKvnGTp0qNm5eMGCBQIAYeXKlbplJSUlQteuXQU3NzchLy9PEITyOIWHh4eQkZFhcIytW7cKAIS///7bYHnr1q2F3r172/ApENUsli4hskKhUGDy5Mkmy52dnXW/5+fnIysrCz179kRRUREuXLhQ4XEffvhheHt761737NkTAHD16lWr+7Vo0QInTpzAo48+isTERHzxxRcYOXIkAgMD8d133+m22759O3JycjBu3DhkZWXpfiQSCTp37ox//vmnwjFaolKpsHbtWjz88MO6R5L79euHgIAArFq1Srfd8ePHkZCQgBkzZsDLy8vgGNr9MjMzsWfPHjzxxBMIDw83u01l9O7dG82bNzdZrv/nduvWLeTm5qJnz566x74AYOPGjdBoNJg9ezbEYsN/IrVjEovFmDBhAn7//Xfk5+fr1q9atQrdunVDVFRUpcdORESVt27dOnh6emLAgAEG819sbCzc3Nx08592Xvrzzz/NlrioDM7RtuEcTURE1U2tVmPbtm0YOXIkGjZsqFseHByM8ePHY+/evcjLywNQdk1w9uxZXL582eyxnJ2dIZfLsXv3bpMyaLb67bffsH37dpMfWxpne3l54dChQ0hJSbH7vH/99ReCgoIwbtw43TKZTIYXXngBBQUF+Pfffw22HzNmjK50m1b//v0REhJicB1x5swZnDp1qlb0SCEyxkA3kRWhoaFmmy+cPXsWo0aNgqenJzw8PODv76/7Rz43N7fC4xp/YdQGvW2ZOJs0aYIVK1YgKysLp06dwgcffACpVIopU6Zgx44dAKCbpPv16wd/f3+Dn23btt1VU6xt27YhMzMTnTp1Qnx8POLj45GQkIC+ffvi559/1j1+deXKFQBAy5YtLR5LG9i3tk1lWPoS++eff6JLly5wcnKCj4+P7tF0/T+zK1euQCwWm/0Sru+xxx7D7du3sWHDBgDAxYsXcezYMUycOLHq3ggREdnl8uXLyM3NRUBAgMn8V1BQoJv/evfujTFjxuDdd9+Fn58fRowYgaVLl0KpVN7V+TlHV4xzNBERVbfMzEwUFRWZ7cvQrFkzaDQaXL9+HQAwd+5c5OTkoEmTJmjVqhVeeeUVnDp1Sre9QqHAhx9+iL///huBgYHo1asXPvroI6Slpdk8nl69eqF///4mP7Y0nvzoo49w5swZhIWFoVOnTnjnnXcqTJDTunbtGho3bmxyc7hZs2a69frMzdHaG8gbN25EUVERgLKbx05OTnjwwQdtGgdRTWKNbiIr9LOLtHJyctC7d294eHhg7ty5iI6OhpOTE+Li4vDaa6/ZVGdLv7aVPkEQbB6bRCJBq1at0KpVK3Tt2hV9+/bFqlWr0L9/f90YVqxYgaCgIJN9pdLK/6+vvZP70EMPmV3/77//om/fvpU+vjmWMseMm39qmftz+++///DAAw+gV69e+PrrrxEcHAyZTIalS5dabNJlTfPmzREbG4uVK1fisccew8qVKyGXyy1+LkREVP00Go1J9rI+bZaSSCTCr7/+ioMHD+KPP/7A1q1b8cQTT+DTTz/FwYMHdbUtK4tzNOdoIiKqG3r16oUrV65g06ZN2LZtG77//nt8/vnnWLJkCZ566ikAwIwZMzB8+HBs3LgRW7duxdtvv4358+dj165daNeuXbWO76GHHkLPnj2xYcMGbNu2DR9//DE+/PBDrF+/HoMHD67Sc5mbo4GyG8gff/wxNm7ciHHjxmH16tW6htdEtQ0D3UR22r17N27evIn169ejV69euuUJCQkOG1OHDh0AAKmpqQCA6OhoAEBAQAD69+9vdV97Hj8uLCzEpk2b8PDDD2Ps2LEm61944QWsWrUKffv21Y3hzJkzFsegfYzszJkzVs/r7e2NnJwck+XGd6Ct+e233+Dk5IStW7dCoVDoli9dutRgu+joaGg0Gpw7dw5t27a1eszHHnsMM2fORGpqKlavXo2hQ4calKQhIqKaFR0djR07dqB79+4Wv6zp69KlC7p06YJ58+Zh9erVmDBhAtasWYOnnnrqrspz6OMcXTHO0UREVJX8/f3h4uKCixcvmqy7cOECxGIxwsLCdMt8fHwwefJkTJ48GQUFBejVqxfeeecdXaAbKJuDXn75Zbz88su4fPky2rZti08//RQrV66s9vcTHByM5557Ds899xwyMjLQvn17zJs3TxfotnS9EBERgVOnTkGj0RhkdWvLrUZERNh0/pYtW6Jdu3ZYtWoVGjRogKSkJHz55Zd3+a6IqgdLlxDZSZuNrZ99XVJSgq+//rraz/3ff/+ZrSX6119/AYDu0axBgwbBw8MDH3zwgdntMzMzdb+7uroCgNkvqcY2bNiAwsJCTJs2DWPHjjX5GTZsGH777TcolUq0b98eUVFRWLBggcmxtZ+dv78/evXqhR9//BFJSUlmtwHKLipyc3MNHiFLTU3VPZJsC4lEApFIZJBhlpiYiI0bNxpsN3LkSIjFYsydO9ckO984437cuHEQiUR48cUXcfXqVdYoIyJysIceeghqtRrvvfeeyTqVSqWbj27dumXyb7o2cKotX+Li4gLAtvkR4BzNOZqIiGoLiUSCgQMHYtOmTUhMTNQtT09Px+rVq9GjRw94eHgAAG7evGmwr5ubGxo1aqS7HigqKkJxcbHBNtHR0XB3d7/rkmcVUavVJqVRAwICEBISYnBuV1dXsyVUhwwZgrS0NKxdu1a3TKVS4csvv4Sbmxt69+5t81gmTpyIbdu2YcGCBfD19a3ybHKiqsKMbiI7devWDd7e3pg0aRJeeOEFiEQirFixwq6yI5X14Ycf4tixYxg9ejRat24NAIiLi8NPP/0EHx8fzJgxAwDg4eGBxYsXY+LEiWjfvj0eeeQR+Pv7IykpCZs3b0b37t3x1VdfAQBiY2MBlGV6DRo0CBKJBI888ojZ869atQq+vr7o1q2b2fUPPPAAvvvuO2zevBmjR4/G4sWLMXz4cLRt2xaTJ09GcHAwLly4gLNnz2Lr1q0AgIULF6JHjx5o3749pkyZgqioKCQmJmLz5s04ceIEAOCRRx7Ba6+9hlGjRuGFF15AUVERFi9ejCZNmhg0qbJm6NCh+Oyzz3D//fdj/PjxyMjIwKJFi9CoUSODL+eNGjXCm2++iffeew89e/bE6NGjoVAocOTIEYSEhGD+/Pm6bf39/XH//fdj3bp18PLywtChQ20aCxERVY/evXvjmWeewfz583HixAkMHDgQMpkMly9fxrp16/DFF19g7NixWL58Ob7++muMGjUK0dHRyM/Px3fffQcPDw8MGTIEQNnju82bN8fatWvRpEkT+Pj4oGXLlhZrVnOO5hxNREQ168cff8SWLVtMlr/44ot4//33sX37dvTo0QPPPfccpFIpvvnmGyiVSnz00Ue6bZs3b44+ffogNjYWPj4+OHr0KH799VdMnz4dAHDp0iXcd999eOihh9C8eXNIpVJs2LAB6enpFufkqpKfn48GDRpg7NixaNOmDdzc3LBjxw4cOXIEn376qW672NhYrF27FjNnzkTHjh3h5uaG4cOHY8qUKfjmm2/w+OOP49ixY4iMjMSvv/6Kffv2YcGCBXB3d7d5LOPHj8err76KDRs2YOrUqZDJZNXxlonunkBEwrRp0wTj/x169+4ttGjRwuz2+/btE7p06SI4OzsLISEhwquvvips3bpVACD8888/uu0mTZokRERE6F4nJCQIAISPP/7Y5JgAhDlz5lgd5759+4Rp06YJLVu2FDw9PQWZTCaEh4cLjz/+uHDlyhWT7f/55x9h0KBBgqenp+Dk5CRER0cLjz/+uHD06FHdNiqVSnj++ecFf39/QSQSmXwOWunp6YJUKhUmTpxocXxFRUWCi4uLMGrUKN2yvXv3CgMGDBDc3d0FV1dXoXXr1sKXX35psN+ZM2eEUaNGCV5eXoKTk5PQtGlT4e233zbYZtu2bULLli0FuVwuNG3aVFi5cqUwZ84ck/ECEKZNm2Z2fD/88IPQuHFjQaFQCDExMcLSpUvNHkMQBOHHH38U2rVrJygUCsHb21vo3bu3sH37dpPtfvnlFwGAMGXKFIufCxERVQ9z87cgCMK3334rxMbGCs7OzoK7u7vQqlUr4dVXXxVSUlIEQRCEuLg4Ydy4cUJ4eLigUCiEgIAAYdiwYQbzoyAIwv79+4XY2FhBLpdXOE9zjuYcTURENWPp0qUCAIs/169fFwShbL4fNGiQ4ObmJri4uAh9+/YV9u/fb3Cs999/X+jUqZPg5eUlODs7CzExMcK8efOEkpISQRAEISsrS5g2bZoQExMjuLq6Cp6enkLnzp2FX375pcJxauexzMxMs+sjIiKEoUOHGizTv95QKpXCK6+8IrRp00Y3V7dp00b4+uuvDfYpKCgQxo8fL3h5eQkADGIQ6enpwuTJkwU/Pz9BLpcLrVq1EpYuXWqwv7U4hb4hQ4YIAEw+Q6LaRCQINZCGSkRUT23atAkjR47Enj170LNnT0cPh4iIiO7gHE1ERFR1Ro0ahdOnTyM+Pt7RQyGyiDW6iYjuwnfffYeGDRuiR48ejh4KERER6eEcTUREVDVSU1OxefNmTJw40dFDIbKKNbqJiCphzZo1OHXqFDZv3owvvvjCYqdrIiIiqlmco4mIiKpGQkIC9u3bh++//x4ymQzPPPOMo4dEZBVLlxARVYJIJIKbmxsefvhhLFmyBFIp7xsSERHVBpyjiYiIqsayZcswefJkhIeH49NPP8XYsWMdPSQiqxjoJiIiIiIiIiIiIqI6jTW6iYiIiIiIiIiIiKhOY6CbiIiIiIiIiIiIiOq0e65gnUajQUpKCtzd3dmYhoiIqoUgCMjPz0dISAjEYt5TrizO2UREVJ04X1cNztdERFSd7Jmv77lAd0pKCsLCwhw9DCIiugdcv34dDRo0cPQw6izO2UREVBM4X98dztdERFQTbJmv77lAt7u7O4CyD8fDw8PBoyEiovooLy8PYWFhujmHKodzNhERVSfO11WD8zUREVUne+brey7QrX2UysPDg5MwERFVKz6+e3c4ZxMRUU3gfH13OF8TEVFNsGW+ZiEyIiIiIiIiIiIiIqrTGOgmIiIiu+Xn52PGjBmIiIiAs7MzunXrhiNHjujWC4KA2bNnIzg4GM7Ozujfvz8uX77swBETERERERFRfcZANxEREdntqaeewvbt27FixQqcPn0aAwcORP/+/ZGcnAwA+Oijj7Bw4UIsWbIEhw4dgqurKwYNGoTi4mIHj5yIiIiIiIjqIwa6iYiIyC63b9/Gb7/9ho8++gi9evVCo0aN8M4776BRo0ZYvHgxBEHAggUL8NZbb2HEiBFo3bo1fvrpJ6SkpGDjxo2OHj4RERERERHVQwx0ExERkV1UKhXUajWcnJwMljs7O2Pv3r1ISEhAWloa+vfvr1vn6emJzp0748CBAxaPq1QqkZeXZ/BDREREREREZAsGuomIiMgu7u7u6Nq1K9577z2kpKRArVZj5cqVOHDgAFJTU5GWlgYACAwMNNgvMDBQt86c+fPnw9PTU/cTFhZWre+DiIiIiIiI6g8GuomIiMhuK1asgCAICA0NhUKhwMKFCzFu3DiIxZW/tJg1axZyc3N1P9evX6/CERMREREREVF95tBA9549ezB8+HCEhIRAJBLZVLdz9+7daN++PRQKBRo1aoRly5ZV+ziJiIjIUHR0NP79918UFBTg+vXrOHz4MEpLS9GwYUMEBQUBANLT0w32SU9P160zR6FQwMPDw+CHiIiIiIiIyBYODXQXFhaiTZs2WLRokU3bJyQkYOjQoejbty9OnDiBGTNm4KmnnsLWrVureaRERERkjqurK4KDg3Hr1i1s3boVI0aMQFRUFIKCgrBz507ddnl5eTh06BC6du3qwNESERERERFRfSV15MkHDx6MwYMH27z9kiVLEBUVhU8//RQA0KxZM+zduxeff/45Bg0aVF3DJKq3LqTlwc9NAT83RaX2FwQBJ2/kokmgG1zkDv3nxECJSoPTyblo08ATUon1+3k5RSWIS7qFzlG+cFUYvoczybkI93WBh5PMZL/colLcyClCixBPXM8uQuLNQnRt6GtyvuvZRRAEINzXxWB5el4xziTnwkUuhZeLDL6ucsilYty4dRstQz2tjvnGrSKoNQIifF1xPjUPgR5O0AgCMvOVaBZcngF7LiUPt0tVaB/uDZFIhBu3inA1sxBdo30hs/K5FChVuJpZgFahnrr9VGoBkX6uus8lzNsFbk5SnLyRgxYhHrieXQSxSIQrmYUI9FAgyMMJecWlaBTgbvE8SpUaZ5Lz4CQTI9DDSff3MDnnNkpUGkT5uaJQqUJc0i14OcsR6KHAzcISFJWo0DjQHfEZBWjbwAtisQgZ+cXILixBoVKFVqFekEvFOJOci1tFJQCA2AhvuMilKC5V48CVmxCJgDYNvODtKkdKzm1czihAQz9XhPm4WBwvGdq6dSsEQUDTpk0RHx+PV155BTExMZg8eTJEIhFmzJiB999/H40bN0ZUVBTefvtthISEYOTIkY4eOhER1WLa68umge5wlkscPRyqQUk3i3AuNRcKmQTdon2hkPLPn4iI7FN7IlM2OHDgAPr372+wbNCgQZgxY4bFfZRKJZRKpe51Xl5edQ2PqE65klmA+xf8ByeZGBfes/2Gk771ccl4ed1JtAv3wobnulfxCCtvzu9n8fPhJLzQrxFmDmxqddspPx3D4cRsjGgbgi8eaadb/t/lTEz84TBCvZyx7/V+Jvv1+eQf3Coqxa/PdsXjS4+gQKnCnOHNMbl7lG6bUrUGPT/6BwBw4b374SQrv1gftWgfUnKLDY7p5yZHVkEJNk7rjrZhXmbHq9YI6PFh2THXP9cNo7/eDyeZGDKJGPnFKuyY2RuNAtxwPbsIQxb+BwBYM6ULOkb6YNiXe5FTVIo3hsRgSq9oi5/J6K/34VJ6ARZPaI+BLYJ05zs3dxDOpuThwSUH4OemwKSuEfh0+yV0jvLBoYRss8c6MKsfgj2dza579ddT2HQiBQDgrpDi9LuDIAgCuv9vFwDg5OyBmPjjIZy6kWtxrPNHt8K4TuHoNK88c/jRLuEY2TYUY5cc0C3r0tAHa6Z0xf/+voBl+xMBAKFeztj7Wl90u3M+ALg8b7DVmwBULjc3F7NmzcKNGzfg4+ODMWPGYN68eZDJym4MvfrqqygsLMSUKVOQk5ODHj16YMuWLXBycnLwyImIqLYqVWvw2m+nsD4uGTFB7lj7TFd4OpsmHFD99O/lTLy98QwA2HQdT0REZKxOfZtPS0tDYGCgwbLAwEDk5eXh9u3bZveZP38+PD09dT9hYWE1MVSiWm/3xUwAQHGpptLHWHesrFHc8aScqhhSlfn5cBIAYOGu+Aq3PZxYFqD9+3SawfLNp1IBlGUXm3OrqBQA8MfJFBQoVQCAxKxCg23yi1W633NvlxqsMw5yA0BWQVn28d7LmRbHW1yq1v3+27Ebd5ZpdOc6cCULQFkmudbFtHzcLFAi586Yz6fmWzw+AFxKLwAAbDqRgpuF5TcKc2+XYtvZtDtjVWLJv1cAwGKQGwDOJlu+uagNcgNAvlIFQRBwW+/9XckqsBrkBoDVh5JMlq08mISNJ5INlh28mn3nvzd1y5Jzbpv8uRTo/ZmRdQ899BCuXLkCpVKJ1NRUfPXVV/D0LH8aQSQSYe7cuUhLS0NxcTF27NiBJk2aOHDERERUmxWVqPD0T0exPq5sDr+Qlo+nlh/B7RJ1BXtSfeGv95TpFaPraiIiIlvUqUB3ZcyaNQu5ubm6n+vXrzt6SES1Qu6dkg53w1lWux8ndL2Lx11VGsGm7YqsfPkqKikPmgp6hytVW7+54Okit7hOqSrfV6U2HaN2iTb4DpSVSUnPKw9YZxUoYQuJRIQMvf3URp+JWqj4M9LYsI1W7u1Sg3HnGQWhzfF0lqFEZfp5am9EGHMx+jtx45bhjYzCEga6iYiIalp2YQnGf3cIuy9mwkkmxtvDmsPdSYojibcwfXVchddOVD/c3zIInz3UBoBt14FERETG6lSgOygoCOnp6QbL0tPT4eHhAWdn84/GKxQKeHh4GPwQkWGGsWBHMFKfU20PdCsqX51JY2OgWz8DudRon0Kl3jq9L2hKM4FZfS5WPlf9jO6iUtMguzZrWz9gm56nRHpesd5r02xycyQikcG2xgFlWz4iGz/GO+NSGnxmmfkVB+Q9XWQoVJoGp28Vmt7I0WgElBh9UT6bYpgxrn9+IiIyTxAEm+cSujtqjYDknNsmN5trO0EQ7vQpqXjcN24VYeyS/ThxPQdeLjKseqoLnuwRhR8mdYRCKsbOCxl47ddTNl+bUd2m7Y3DQDcREVVGnarR3bVrV/z1118Gy7Zv346uXbs6aERE1U8QBHy09SIaeDtjQucIZBeW4IO/zuPhjmHoGOlT4f77r2RhQ1wy2oV743xqHt55oAUkYpFBoLtULUAuFQEoa1D56bZL6Bbti8sZBejV2A/3twwGACz6Jx5iUVnjv+bBHlBIy++VfbrtIl62UEfvYlo+vvn3Cmb0b6JrypieV4zpq+Nwq6gUz/RqiANXb+K1+2MQ6GFYv/fE9Rz8tD8RnaJ8EJd0C+880MKg8aVKrcHs38/ixq3beLxbBPo2DdCty8hXYs3hJOy6kIGcolIk59zGV+PbQSIWYdn+RMy4r7yMQolag+NJt9A2zAvzNp/H+uPlpS9e/uUkOjf0wYErN/HCfY0RdacpIwCDx2lLVBoUl6rxzu9nMaB5oK78CQDM3nQGhUo1zqXmYfaw5tb+yFCi1iA+Ix9TV8ZBpRFw41YR5gxvgWPXbhlkYxeZCfB+tv0Snu/XCAV6AduM/GJ8vbu8jMul9AIs25eAo9duYW98FrpF+yLM2wWvD46BSCTSbff7yRQk6D022u/Tfw3HWUHAHgCeXXkM3aJ9cSQxG32bBiCnqBSHE7Ph52aatf7gkv2IDnDTG3fFge7Np1JNsrIBYP+VmybLHv72AM4YlVL50qi8TYGZz5SIiAz97+8L+GbPVbw3ogUmdo109HDqjdyiUpxPy8OF1DycT83HhbQ8XEzPR3FpWYPmhY+0Q6sG1htW1wZpucV4ae0JHLh6E+E+LhjZLhSj2oUaXD9pXUzLx2M/HkJ6nhIhnk746clOukbWnaJ88PWE9piy4hjWH0+Gt6scbw1tZnCtQvWPp0tZoNu4vBwREZEtHBroLigoQHx8eZAhISEBJ06cgI+PD8LDwzFr1iwkJyfjp59+AgA8++yz+Oqrr/Dqq6/iiSeewK5du/DLL79g8+bNjnoLRNXuTHIeFu8uq4U8oXME5v5xFhtPpODXYzeQ+L+hFe4//rtDAIB1d+o5tw3zwpjYBijUC9AWq9SQ3wlaL/rnCrafS8f2c2VPT6w+lITE/w1FblEpPt560eDYj3Qsr3n/5a54jGgbikZ6gUqtsYv3I1+pwtmUPGx9qRcA4JVfT+FI4i3d70DZF7wfHu9osO/IRfsAQBd4jvRzxXN9GunWn7yRo6vTfKuwBLERhsH/19efNng96uv9ut/161hr161+ujO+35tgsPy3uBv4La7s8zufmoctM3rp1umXLilVa7B0XyLWHLmONUcMyyT9c7G87varv52CNcpSNZ7+6ZhBkPmtO4159N2yUH4mKbvIIMs5Pa8Y124avtd3/jin+/2vO/XJ+zcPNLl5cjrZeo1sW2iDztvOlT+Ro61Hri+vWGVQ793WbMGT13Mq3AaA7u+bPpPSJQx0E1E9cezaLXy+/RJahHhgVPtQxARVzVONVzML8MOdefL9zefRNdpXF5gk+6g1QllCwvFkHLxy02z/Dq2ErEKMXrwPrw6KwZM9oiAWVxzsjc8owNf/xMPDWYa3hzWHxIZ97taOc+l45deTuhJiSdlFWLjzMhbuvIy2YV4Y3T4Uw1qHwMdVjiOJ2Xhy2RHkFavQOMANPz3ZyaSB9X3NAvHx2NaY+ctJ/LA3AT6uckzr28jcqame0DYfZaCbiIgqw6GB7qNHj6Jv37661zNnzgQATJo0CcuWLUNqaiqSksobjUVFRWHz5s146aWX8MUXX6BBgwb4/vvvMWjQoBofO1FNySs2vMhLuMvGLOn5ZV+i9L/qKEs1wJ1EanMlHwBApTHN3jUuXVJkob5x/p3g4cX08iaIl9JMGyIm3Kz4veUY1V7WDzSn5RUjw45HqS+aGYPx8Y1dMNpHv3xIiUqD5Jwi413sVqzS2PTnrF93W1/ebZVBwDY1p7jCcikAkGKh8aajVOdj8UNaBekC/PoY6Cai+mDHuXRMWx0HpUqDvfFZ+GbPVTQL9sDodqF4oG2IydNT9vhwywWoNAIkYhGUKg1eWnsS65/rBpnEtoqIpWoN/r2YiQ6R3vCy0pOiPjuXkocNx29g04kUk6eXGng7IybIA82C3dEs2AMxQe7wcpFj1vpT2Ho2HfP+Oo//4rPw6YNt4O+uMHv8jLxifL7jMn45el1X8sRVIcErg2Kq7T0Vl6rxwV/n8dOBawCAlqEe+HBMa8RnFGB9XDL+u5yJE9dzcOJ6Dub+cQ49GvvhwJWbUKo06BDhje8ndbD492F0+wa4VVSK9/48h4+3XoSPqxzjOoVX23shx9KVLikua1TODH4iIrKHQwPdffr0sVq3bdmyZWb3OX78eDWOiqh2Mflf5C4v9tR3GhjqN1vUr/tsqdmPudqQ+qVLjI9ZGXIbviRrszy09MebVaDEDTuCtQqZBCi2P7Cp/+/Wbb3gflU1SiouVUMhFVcYnM7INx8ILlCqDEpw5NsYvK1t9aktBfKrwnN9GpkNdLN0CRHVdb8cvY5Z609DrRHQs7EfXOQS7LqQgfOpeZiXmof5f59H90Z+GNUuFINaBNnVz+JIYja2nk2HWAQsn9wJ03+Ow+nkXHy5Kx4zBzSpcH+1RsBLa0/gz1OpaBzgho3TutvdT0M7B9e24JdaI0CpsjyPZheW4M9Tqdh4PNngprmXiwzDW4dgcKsgtAz11AX5jC15NBarDydh7h/nsOdSJgZ/sQefPtQWvZv467bJLy7Ft3uu4vv/EnQ9RDpEeOPotVtY9M8VtAr1wv0tg6roHZe7nJ6P538+rntfT/eMwv8NagqFVIIWIZ4Y0TYUGfnF+P1ECjYcT8bZlDzsvvOkW/9mAfhyXHs4V9BA/MkeUcguVGLRP1fw5obT8HKWYXCr4Cp/L+R42mt9tUZAYYkabnfRc4eIiO49nDWIqkFRiQpOUolNj5XaQxAEg0zsxKxChHg5o0StMbgILFVroNYIZptFqu98QTRsjlhxoPu2mcaHMHp7GXlKFJWooJBKLD4eq76TBWaOfqC8QKmCq5kvPS5yCUrVGmTfyTzXD84KAnDwqmltZkvMBe+tfUnVuqmX9a5fgiO7sMT0xkQl2JqBXao2PJmrXILCEjVuFZXgSqZpRrhMIjLZR196XjGuZBbYP+BqUp0Z3ZF+rhCJTG8kMdBNRHWVIAj4evcVXZmxMe0b4H9jWkEmESOnqASbT6diQ1wyjl67hf8uZ+G/y1nwdjmHn6d0samsiSAI+OCv8wCAhzuGoUdjP7w/siWmrz6ORf/Eo19MANqGeVnd/53fz+LPO/0rLmcU4NVfT+Gr8e1sDlpfSs/Ho98fQlGJGk2D3NEs2F2X/dw0yKNSATGlSo3dFzOxIS4Zuy9lIMLHFaPah2JE2xCTMhrm3tPRa7ew4XgyNp9KtbnUglwixn3NAjCqXSj6NA3QlY+zRiQSYULnCHSM9MHzq4/jYno+Jv14GE/3jMKM/k2w7uh1fLkrXneN0i7cC28MaYaOkT6Y+8c5/LgvAf+37iQaBbiZLTNXGYIg6ILvSpUGfm5yfPJgG/TR65eiFeDuhKd6NsRTPRviUno+fj+RAoVUjKl9oiG18WmA/xvYFNmFpfj5cBJeXHMCHs4ydG/kVyXvhWoPJ1n534cSlQYw/+ACERGRWQx0E1WxzHwlOs7bgc5RPlj7zN03StX/7qfWCNCPEff5ZLfu92WTO+q+WPT5eDduFipxYvZAk+Npg7sqtX5Gt8ZkvTH9c2l98+9Vg9fPrjwGAOgU6YNfnjX/3h9fehgrnuxsdl18RgGOJGajuFSNiT8cxuPdIk22KVVrMHbJAYt1mY3HZE22mTItL609WeF+Hd7fYfYYcXr1pe/G2qPXK97IDG9XOQpLbuO5VXFm17sqpFZLs3yx8zK+2Hm5UueuDqlWapXeLVe5BH5uCmQaPTLO0iVEVJucvJ6DX45eR8/GfugbEwCF1HzWq0YjYO6f57BsfyIA4Nne0Xjt/qa6ALKXixwTOkdgQucIJN0swsYTyVh37DquZ9/GMyuO4ffpPUyemDL21+k0HE/KgYtcgpf6l2VvD2sdgu3n0rHpRApmrj2BzS/0tJiZ+/mOy1hx8BpEIuC5PtH4ds9VbD6dijb/eWJKr+gKP4vr2UWY+MMhXamPY9du4dg1w94L4T4uBsHvZsEeCPN2MUk8EAQBcUm3sD4uGX8aBagvpufjf39fwIdbLqBbtC9Gtg3F4FbBBkH0q5kF2Hg8GRtOJON6tu1PknWK9MGo9qEY0jJY13DPXk0C3bFpenddmZDv/kvATweu6W6QN/Rzxav3N8WgFkG6P/9ZQ2JwJiUXhxOy8cyKo9g0vUeFNwUEQcCG48nYeSEDsHCPPCO/WNf/olcTf6vlVIzfw/8NMt/A3BqRSIT3R7ZE7u0S7DyfYdAQnOoP/RtfmqrIICEionsKA91EVezvM2WZSocSsqv82CqN5Tp17/x+FrtfCYAgCEi+U77jqpmsXl2gW2Mpo9v0grJAqbIrU/lwouX3/t/lLKv7vvvHWV2WtvYLu76iErXNzQfNcXeSIr8S5UrqArGZvxu+rnJddperXIoPx7TGMyuOVcv5zWVI2+rB2Aa6hqnVwctFhubBHlBrBET5uUIkEiHQwzTQfdNCjXoiopqmVKkxbXUcbty6jVWHkuDhJMXQ1iEY3T4UHSK8ddcDJSoNXl53En+cTAEAvD2sOZ7sEWXxuOG+LnjhvsaY2CUCw77ci2s3i/DS2hP4/rEOFp9EU6rU+HDLBQDAlF4NEaBX43vuAy1x6Go2rmYV4n9/n8e7I1qa7L9sXwIW3rmROndES0zsEoEgDye8veks/vf3BbQM8UQ3K5m5WQVKPPbjYaTnKdE4wA0fP9gG124W4nxqPs6n5uFCWh7S85RIyi5CUnYRtp4tb37sIpfcyf72QLMgd2QWlGDj8WQk6TWkDvRQYETbUAxpFYzzqXnYEJeMw4nZ2Bd/E/vib+LtTWcwsHkQWoR44K8zaQbXIa5yCQa3CsaodqFoF+4FkfHjbneIxbB4o8JeTjIJ5o5oiR6N/PDqb6eQU1QKPzcFZvRvjIc7hpnUS5dJxFg0vj2GffkfrmQW4pV1J/H1hPYWrylzi0rx+vpT+PuMaYkvYzKJyK4GmXdLIhbh84fb4nJ6AVqGelb7+cgxxCJAIzDQTURE9mOgm6iKWSsNcbeMM7r1aROx9ct/mPv+oi1dUmIho9tc08nqLCFh7FZhKfysZAOZy8I2Z87w5nj3j3Mmy82VZlk2uSMeX3rE9kHa6P4WQcguKsHhu7jpsXhCe/wXn4XVh5Iq3NY4G3/O8OY4du2W7jFxN4UUg1pUfW1OAPhqfDsMax2C7/+7ivc3n69w+9nDmqNlqCce+uYAAODlgU0xNrYBHv72oNX93hraDE/1bIid59Px5PKjNo1tYpcIvDfSNPAS6O6EM8gDAHRp6IODV7ORUY11wYmI7PHT/mu4ces2fFzlkEvESMsrxs+Hk/Dz4SSE+ThjZNuyGtv/+/sC9sZnQSYR4ZMH22BE21Cbju/tKsc3E2MxZvF+7LqQgYW7LmNGf/N1tlceTEJSdhH83RV4umdDg3WeLjJ8/GBrTPzhMJYfuIb+zQPRs3F53ehNJ5Lxzp35eOaAJpjYJQIA8GiXCJy4novf4m5g+s/H8efzPRDiZVoqJL+4FI8vPYyErEKEejljxZOdEeTphLZhXhjRtny77MISXEjNw7nUPFxIy8eFtDxcSi9AUYkax5NycNzoqSsXuQT3twzC6HYN0DXaV1dWrW2YF8Z1Csf17CJsOpGM9ceTcTWzEL+fTMHvd24mSMQi9GxcVud8YPOgCutLV5eBLYLQNswLB67eRP9mgVbrnfu7K7D40Vg8/M0B/H0mDd/suYpne5tm0h9JzMaLPx9HSm4xZBIRnurZEMGe5puXigB0aeiLxoHuVfWWbKKQShjkrufEIhE0glAlJQGJiOjewkA3URWrqoaE5qgFwWKmkDbjQV1RoFvbjNJCjW6VmUB9ih0NHrUq2yX9VlEJoq3UjrxZYFug21x9csAwqK8V7V81tSqNuSqkKCy5u+xxJ5kEge7mv2AaM/67J5eKEaiXdeeqqL4v4tosNUufe0VcFRKDsepzlklMasRXRVacfkZiQ383HLyaXaM3dYiILMkpKsGXu8oyoGcNjsHo9g1w8OpNrI9LxpYzqbiefRtf7orHl7viAZQFbZc8Goteeo0JbdEy1BPzRrXC/607iQU7LqN1A0/0iwk02Cb3dqluLC8PaGI2mNqzsT8mdY3A8gPX8Mq6U9g6oxc8XWT452IGXv6lrCTY490i8Xy/Rrp9RCIR5o1qiQtpeTibkoepK49h7TNdDeaR4lI1nv7pKM4k58HXVY4VT3ZCkIWgq4+rHN0a+RlkhqvUGiRkFeJ8Wj4upObhfGoepBIxhrUOxoDmgXCRW/4qFObjgun9GmNa30Y4nZyL9XHJSMgqRO8m/hjeJsSmEh01IcDDyeabG+3DvfHOAy3w5oYz+GhLWSZ9j8Zln5dKrcFX/8Rj4c7L0AhApK8LFo5rh9YNvKpx9ETmlT2lKFgsqUhERGQJA91Ed6FEpcHKg9fQs7GfLptFZRRszCsuxdrD1zGsTbDFpkZpucX442QKHuoQpqvZeODKTSTn3DbIolGrBZMGkFo3bt2GUqU2yOieZyazdu3R63hrWHODgPaSf6/CSSrB6sNJuJplWu5k4g+HLXwCln2z5yqcZRJc13s0WGvpvgRdZrmxohI19lzKtHjczadTbTq/fiObilj60ny33BQS5BTZPg5zFDIxAj1s+zJdYvR3TyYx3Ndaptfd0n7eChsaamnpPz3gKpdC4mH+L7eTTGwS6Lbnz9cS/c+moZ8rACA9n4FuIqpaRxOzce1mEUa3D7X5BvCXu+KRV6xCTJA7RrdvAIlYhO6N/NC9UVkDyG3n0rDheDL+u5wFL2cZfny8I9pYaQRpzdjYBjh5PQcrDl7DjDUn8Pv0Hoi8828iAHz9TzxyikrRJNAND3YIs3ic1wc3w3+Xs3A1qxCzfz+Dx7pGYOrKY1BpBIxoG4LZw5qbvH8nWVmAfvhXe3HyRi7e+f0s/jemNYCy66kXfj6Og1ez4aaQYtnkTmho541pqUSMxoHuaBzojgfahNi1r5ZIJELrBl71JuA7vlP4ndrvN/D8z3H44/keEIlEeGnNCV3pudHtQzF3RMtKNfckqgrafypYuoSIiOzFqxeiu7BsfwI++KusZmXi/4YCMCwJAgBvbjiDP06mYMXBa9jzal+zxxn//UFczSxEXNItLH40FgAw7ruyEg5vDmmm206lESzFuQEA3/+XgAmdw3WvzdXDzi9W4WJaPkr1goyHE7Ix/vtDVo5sv//9fcHiOnMlRapSsKeTXRm/xrUsq0qHSB+k59kWmLdEIZUg3MfFpm3viwnEb3Hlda4VRhnd7k5l/+QHuCt0zbxkEpFBuZ2WoR44k5xn9zi1GXi+bnKD5Q39XJFzu9Sk5EyTQHcE6Y1NLBYZZNa1CfPS1UAVjPYDyjL37pb+59oipOwR6PQ8ZaWfRiAiMpZ7uxSPLz2CAqUK2YUleLpXwwr3SbpZhJ8OJAIA3hjSTFdSQ8tZLsGItqEY0TYUOUUlkErEdx2QfHtYc5xNyUVcUg6eXXkM65/rBhe5FNezi7D0Tr+MWYNNx2I8rs8ebosxi/dj04kUbD2bhuJSDfo09cfHY9tYrN8c5uOCL8e1w6QfD2PNketoE+aFRzqG4c0NZ7DtXDrkEjG+fSwWrRqwVEVVEIlEmDuiJS6k5ePUjVxM+vEwMvOVyCtWwU0hxfsjW2JkO9syxImqi/bfGsa5iYjIXgx0E90F43qPgGlG987zZQ2RksxkNmtpm0buvJABoKzsh9a17PIMa40gmG04qHU4IRsPd7ScbaWVe7vUbImS2izS1wWJNy1/hvrWPdsVl9Lzbdr2lUFNbR7D3BEtcCWjAMsPXLO4zePdIlFcqkbzEA8Max2M7efSLW7b0M/VIIP+t6ldcTwpBwlZhVh1pya3k0yMdmFeePeBFpjz+1ndtm8MicGFtHwcTsjGjVtlpWXmPNAcW86korCkLPtZJhHD26U8IBxwpwTKb1O74Zs9VxDu44JxncKx7ugNyKViZBeW4NEuERjyxX9Iu1PC44NRrfDGhtMG434wtgGah3jA102BF34+XjbOOzcW9OuyAsDqp7ugVK3B9nPp0AgCXBVSSEQidG/kC5FIhIXj2sHfrTyzeu2ULkjNLcbVrEJdoPvhDmEY0ioYF9Ly0PPOI9YN/d3w0djWePXXU7p9Zw9rjsGtgnA08RZ83eQY/13ZzRsB5v+uD2kVjKwCJfzdFWgf4YXHukYg0MMJKo0AmYSBbiK6e6sOXUOBsqyE1f+2XECLUA90i7bcdBEAPtx6AaVqAb2a+FdYisTL5e5v+gFlpa4WPxqLoQv34kJaPl7/7TS+eKQtPtl2ESUqDbpF+6JP04rLorQN88K0PtFYuCsexaUatA/3wtcT2kNewdM+PRv74+WBTfHx1ouYs+ksDly5id9PpkAsAhaOa1fhZ0b2cZJJsPjRWAz/ci+u3LkGbRPmhYWPtEWEr2sFexNVP+33HWZ0ExGRvRjoJroL5mLOxnWS7Qoo39lUqSo/hn5tOpVGMHtOe8/nIpdUaS3xKD9XJJgpeWKrfjEB2HUnyG+Ot4sMj3aJsKnJIQA08HZBko1B8fbh3maXfzimFd7ccMagFEyYjwse6xqJ49dzcOpGrtn9nuwRhTC9TGFr2eIPdQzTZb4HeTghNsIHsRE+uJJZoBfolkAsFmFSt0gcSriJv06nAQCm9CprIPXqryfxy9GyLG4PJxmm9onGJ9suAQDkErFBWZaAO6U6wnxc8P7IVrrlT/SIMhjXmNhQLPrnCgBgXKcwg0C3i1yCjx9sAwC4pZelLb0TGDZ+v9rzG59Dy/hR8s4NfQHAoPnmoJZBaBPmZfJY/kMdwvDtnquIzygwOMfwNuZLBBlzkkl0nyMAzB1h2rCSiKiylCo1lu5LBAA09HfF1cxCPL/6OP6w0HQRAI4n3cLmU6kQicpqc9ekQA8nfD2hPcZ/dxC/n0yBi1yCTSdSIBKVZZbb+qTL8/c1xtWsQhQqVfj84bZW62Dre65PNE7dyMHWs+m6po/zR7fC/S2rp4nyvS7UyxlfT2iP2ZvOYEDzQMzo36TannAjsld56RLHjoOIiOoeXs0Q3QVzjSFLjQLN+nWIK6LNPNVmfwFAiar8eGq19YxuW8+n0ggm47wbns6yu9rfWW69zIhGAHKKSu06psLGGs6WMnedZBKTL3zSO49RWsugM3583Np3Rm0pEcAw61j/GPo1r3Nvm34GErHhCfSbeMmkYgToNcuy9dF2/eQZa4EN/Qw9/cfZ9d9XZemP21KTSgDwusu/e0RE1WXj8WRk5isR7OmEjdO6o3mwB24WlmDqymMoNuo7AJQ9zfXBX2U3dMe2b4BmwR41PWR0ivLBm0PLSqatOXIdADCqbShahtpeNkQmEeOr8e2xdHInuzLORSIRPnmwDaL9yzKKX7s/Bg93DK9gL7obXRr6YttLvfHKoBgGualWYUY3ERFVFq9oiCopp6jEbGNE/UzpNu9uM5uJkJp7G70//gf3L9hjENQuVQvo9+luXEorL7tRoCwPbvb6+B/sjTetu63176VMfLvnaoVjn/TjYWQVKCvczlZ3G+h2rTDQLSCv2M5At401uqUWvtgppKYNEKV3gso+Lpbfr3HDR2sZ9vo3SvT/nrhY+Dzyi1Umy4wD9fqBcblEbDAeW4tx2PqVQv9LsX7p1aqon60fRNcvbWLsbv/uERFVB41GwDd35uMnukfBw0mGbybGwstFhpM3cvHuH2dN9tl6Nh1HEm/BSSbGywNtL6tV1R7vFomRbcuetpFLxXjZjhJfd8vdSYY/nu+Bv1/sial9oivegYjqJe11pYYp3UREZCcGuokq6ce9CWaX6wc2zWXgAsCRxFu4drMIF9LyccKozvfVzEKDWsyWjmHJT1bqR1f2mMaeMWqmdbfBxooeaxYEYHL3KMilYoToleJo4G25REWErwt8XOWQikUItfCIOFCepf31hPYGyxUy02Bz2zulM56/rzHEIqB9uJfB+ob+riZ1SHvcqSndMtQwM8/DSYrBeo9j6yesuCmkiPB1QbCnk0HDxreGNodYBLx4X2PdsifvlOsY3T7UZNxyadl7G9A8EO5OUgxtbVgmxBLj5JlP7pQqAYDPH26r+10mESHKzxV+bnKE+5TX9PxwTGsAwMsDmth0PnM6RHojwF2BjpHeVmu7vnJ/U4hFwOTukSbrRt9ppvVEd/NlU4iIqsvOCxm4mlkIdycpHulU1jsjzMcFCx9pB5EI+Pnwdfx8uLxEU6lagw+3lJWyerpnQ4OyUzVNJBJh/ujWeLJHFD57qI3VObQ6uMilDslmJ6Laozyj28EDISKiOoc1uokqqcRCpq4tta/1G1am32n6p08/ezn3tmkWb3XzcZUjW6/+srFZQ5ohKbsIf58pqxftZSHD+fAb9+HtTWew9azlhowAKmxSpdYIiPJzxcnZA+EkK8u0lknEEASgyVt/m93H3UmG/a/3g1KlgYeTFDcLS9Dh/R0m22mzkoe0Csb7I1virY1nAJQ3V9T6YVIHXYmVaH83nH33fiTnFKH/Z3sAlDWqHN/J9BHr0e0boFcTf3g5y9DozbKxDm0djE8fbGNQZkQ/j1okEmHHzN4QBMOM805RPjjz7iCDGwMRvq44P/d+ON0p1aJ/TLmk7PdvHo2FUqWpsESMbiRGke6xsQ0wtFUwAMMyMyKRCNtf6gWNYPhn2KWhL87NHWRzXVZzXORS7Hm1b4WPUscEeeDsu+XvX9+nD7XBvFGtbH7fRHTvOnYtG2sOX4faymPyA5oFYvCdfwsr8s2/ZX0OHu0SAXen8jmyVxN//J9e08VmwR5oG+aFnw8nISGrEH5ucjzT2/GZzM5yCd4e1tzRwyCie5RYzNIlRERUOQx0E1WSpfhbiQ2Bbv1geHq+aaBbvwFl3l1mX1eGooLAM2CYxW0uozvQQ4EADyeTUh7mVFR3XHuRqw1Y2hpAdZJJdIFfDyfzwXj90h/eerVEjWt8G78PZ7lEF0jWHt9SGRQ/o9IbIsAoyG2aRW0pwGvuvesHcvX/7GR3MrrFYpFdwV5zXyks7W/pPd9NkFvL+DOyxNLYRCL73jcR3ZsEQcDLv5xEYgVNjNfHJWPJo7EVNkc8di0bR6/dglwixuRukSbrp/aOxsnrOdh2Lh1TVx7Dz093wYIdlwEAL/ZvYnM/BSKi+kpXuoSBbiIishOvpInMuJCWB6lYjLziUsglYhSVqNEpysdgG4mF4Ky1msz/Xc5El4a+2H/lpm7Z9nOm2c5ZBeXZ1Mk5t+0d/l3TbyxoiX4g1tyXcm3w25ZgpVBBVeiquMa11HRS/33oZwUbZ3QXlZipjy0tP6a5jGJ7VNWFvGFGd+XGZJzRTURUnx24ehOJN4vgppDi+X6NYG56P3k9F5tPp+L/1p1EowA3NApws3i8b/4tq809ql0oAsw00xWLRfj0oTYY8dU+XM0qxLAv96JAqUJDf1c80jGsyt4XEVFdpU2C4SUpERHZi4FuIiP5xaW4f8F/JstXPtlZV28ZKH+kzpi1jO6JPxxGq1BPnE7O1S07blSjuzaQ2hDo1i9VYS6jW1vP2lImtT7XCrJ/qyIILLJwY0Iq0Q9WS/R+NwwSm2tuqR9Irqj8ir5wHxeTZU2D3G3e3xon/YzuSga6gz1rth4rEZEjrTl8HQDwQNsQi2VDStUaZBYocTghG8+uPIaN07qbvckbn1GA7efLbmA/bdTPQp/7neaUIxft0zWlnjW4WaX/3SYiqk/Ka3Qz0k1ERPbh1TSRkZsF5mtT/xefafDauNyGNgvWWm1rAAZB7qpUQfUPm7QM9cCfz/cwCeKPutPUT5/+l3F/dwVmDY7Bm0OaYe2ULni4QxjeHFpW23N8p3AMbR2MN4c0M3vOF+9rjCi/8kaG4zqF4YNRrfB0z/IGgtYuctc92xWPdAzDf6/2xbhOYVg7pYvFbeeNagkXucQgQC0Vl/+uX/ZDIZPgm4mx8HCS4vFukeja0Nf0M9DbvqLyK0DZzZLxncMxrW8j3bLNL/TAwx3CDJo83g39ZpS2lKAxZ0KXcDzaJRw/TOpQJWMiIqqtbhWWYMudfhPjOpr2WdCSScRYNL49Aj0UiM8owCvrTpp9+uX7/65CEMqaAFvL+gaAxoHu+OTBNhCLgJ6N/dC/WcDdvRkionpCe1mtZjdKIiKyEzO6iWykMMqyMi7vUaLWQCGVIKtAWZPD0rnw3v3YciYNL645UeljLBrfHhG+rgYZ3S/1b4IX+zfGhuPJBtvqZzBLxCKDLLjOekHhcF8XLBrfHgAw76/zBseY2icaLw1ogt9PpuiWzR/dWvf7d/8lALDecb1jpA86RvqY7GvOhM4RmNA5AtvOpmHKimNl78NCVraTVIxBLYIwqIXlWqz6+9pS7qVHYz+DpwIAoEWIJz4ca33c9tAv0VLZzECFVIL3R7aqqiEREdVa648no0StQfNgD7QM9bC6rb+7AosfjcXD3xzA32fS8M2eq3hWb+7LyCvG+riyufIZK9nc+ga3Csa+1/vB20Vu8ckjIqJ7TXlGt4MHQkREdQ4zuomMFKvUZpcbBw2NM3hL1QIEQUBmvmMC3TKxuNIZvFrahosSvSxnqYXa1nK95fpZ0fZwuZN9XNM1ofXPZun92VJbXD/QbUtGd03QD7jbU06FyB5qtRpvv/02oqKi4OzsjOjoaLz33nsG/y8LgoDZs2cjODgYzs7O6N+/Py5fvuzAURMZEgQBaw4nASh7msiWQHP7cG/MGd4CAPDRlgvYezlLt27Z/kSUqDWIjfBGh0gfS4cwEezpbHPzXSKie4H2epZ9Y4iIyF7M6KZ6Z83hJBy9dgsfjmltNct2/t/n4SaX4vn7GhssV5aar7GdlleMZ1ccw62iEihkEjTwNqxj/Nm2S9h9KQNKleUa3dVJLBbddW1Pbb1R/U/NUr1u/SCqpWBxbaV/zWxp7LbcNNAv8VJL4twGAXfWeqXq8uGHH2Lx4sVYvnw5WrRogaNHj2Ly5Mnw9PTECy+8AAD46KOPsHDhQixfvhxRUVF4++23MWjQIJw7dw5OTqYN+ohqWlzSLVzOKICTTIwRZkp0WTKhczhOXs/BumM38PzPcfjj+R7wcpFjxcFrAGzP5iYiIvO0l7PM6CYiInsx0E31zuvrTwMAejfxx/A2IWa3SbpZhG/+vQoAeK5vI4OAeHGp+YzuVYeSDF67yg2zr37cl1DpMVeVu83g1QZ3z6Xm6ZZpP5tne0djyb9XMKFzWQ1T/WxmWzPJO0X64HBitu71fc0CAZRlyJkzrlMYfj58HdP6mm8OVnnlV80yvWz0CJ/yWuFSO4PETQKrppnk3QrxKr8BI6tjNyCo7ti/fz9GjBiBoUOHAgAiIyPx888/4/DhwwDKMrAWLFiAt956CyNGjAAA/PTTTwgMDMTGjRvxyCOPOGzsRFraJpRDW4XY1DhZSyQS4b2RLXEhLR+nk3MxdWUc7m8ZhPxiFRr6u6L/nbmNiIgqh80oiYioshjopnorp8hyU8i84lLd76VqDSTi8qB1sY0Z2YUl5gPi9pCIRXY3Wfnv1b7o+dE/ZtfZk8G78+XecHeSYubak9gbX/botbnHtrUXmK8MaoohrYLQPLishql+IDjQw7bszOVPdMKVzAI08HZGWl4xYoLKjhXm44KdL/eGt4vcYPu5I1piXKdwtAjxtPl92UL/mlk/K9vTRYY9r/SFQmb753jkzf4oVKrg56aoyiFWmptCiv9e7QuZRMx6r1RtunXrhm+//RaXLl1CkyZNcPLkSezduxefffYZACAhIQFpaWno37+/bh9PT0907twZBw4csBjoViqVUCrLyz/l5eWZ3Y7obuUXl+LPU6kAym6q2stJJsHiR9tj+Jd7cTo5V9doekrPhiYNnYmIyD5iXUY3A91ERGQfBrqp3rIWP1bq1eEuVWsMamMqLWR0VwcnqdiugLlMIkKYj4vF9fZkdEf7uwEAIv1csDfe8nY3C8tuGEjEIrRu4KVbXqhU6X73d7ctyOssl6BlaFnQ2ssoqK0djz6ZRGxwzqpi7ZI53Nfy52uOv7vC5vdfU6z9HSGqCq+//jry8vIQExMDiUQCtVqNefPmYcKECQCAtLQ0AEBgoGFma2BgoG6dOfPnz8e7775bfQMnumPTiRTcLlWjUYAbYiPMP1VUkQbeLvhyXHs89uMhaISy+WCkHSVQiIjIPF1Gt2MqQhIRUR3GAq5UJ1SmwaO1DIDknGLd70VGgWZbM7qrgszOUiMVNX2UV6Imc6nKeqbEzQLzmfHZehnzrAVNdG/55ZdfsGrVKqxevRpxcXFYvnw5PvnkEyxfvvyujjtr1izk5ubqfq5fv15FIyYytOZIWTmyRzra1oTSkh6N/fDm0OYQiYAX72vMppJERFVAxNIlRERUSYxOUa235N8r6DhvB77bc9Wu/SxldG86kYwXfj6ue911/k6D9ZZqdFcHiZ1fritq+liZGt3Ocutfyi09gS2uw2UxKnNDgIjKvfLKK3j99dfxyCOPoFWrVpg4cSJeeuklzJ8/HwAQFBQEAEhPTzfYLz09XbfOHIVCAQ8PD4MfIi2NRkB8RgHy9cqPVcaZ5FycSc6DXCLG6PYN7npcT/aIwvm59+PRLhF3fSwiIgK0l+oMdBMRkb1YuoRqvf/9fQEAMO+v83i6V0Ob9xMsXBi99+d5g9fGAXFlDWZ0W6vj2SnKB4cTsg2WVZQ5bW596waeaB/ujVM3cnDtZpGuFInW9H6NcOpGDh7qYL5G6Yz+Tcwuf6pHFA5dvYmxsfbXNnW0Pk390buJP1qFVm3tb6J7RVFREcRGT5hIJBJo7jxjHBUVhaCgIOzcuRNt27YFUFZv+9ChQ5g6dWpND5fqiS93xePzHZcAAGE+zmgW5IGYYA80C3JHs2APhPu42FQf++fDZdncg1oGwcdVXsHWtmEmNxFR1dEm1DDOTURE9mKgm+otSxkAfm5yZBVYLoVSkzW6rWV0P9E9yiTQLangC7y5jO7fp/fQ/d73k90mgW4/NwXWP9fd4vFCvJzNrvO1sl9tJ5WIsfyJTo4eBlGdNXz4cMybNw/h4eFo0aIFjh8/js8++wxPPPEEgLJHjmfMmIH3338fjRs3RlRUFN5++22EhIRg5MiRjh081UnFpWos3Z+ge309+zauZ9/GtnPlTw24yCXoFu2Ld0e0RKiFuauoRIVNJ1IAAOM61r0btURE9wKWLiEiospioJvqLUulS3zdrGdv1WjpEiuBazeF6f+eFZXckFVQ2sTei0WnSpRCIaL678svv8Tbb7+N5557DhkZGQgJCcEzzzyD2bNn67Z59dVXUVhYiClTpiAnJwc9evTAli1b4OTk5MCRU131+4kU5BSVItTLGZumd8el9HxcSM3HhbQ8nE/Nx8X0fBSVqLHjfAYOJ+zB/8a0xpBWwSbH+fNUKgqUKoT7uKBLQ18HvBMiIqqI9iuSpe9zREREljDQTbXWvvgsXEjLN1j2z8UM9G0aYNP+ljO6FSbL9sdnoVsjPwA1XbrE8jpXhelj0Noa3WKR+Qs/hcT6o9N2B7r5KDYRmeHu7o4FCxZgwYIFFrcRiUSYO3cu5s6dW3MDo3pJEAQs258IAJjYNQJ+bgr4uSnQLdpPt41KrcGFtHy8ufEMTl7PwXOr4jCuUxhmD2th0ItizZ2yJQ93DLOpzAkREdU8bekSNSPdRERkJ6ZrUq014ftDeO/PcwbLJi89YvP+lmK63i6mGd3jvz+k+71QWTtKl5jL6B7UoqyJm3Em+Mi2IQAAmbSCjG4bY/gN/VwBAMNah9i2AxERUTU5du0WzqXmQSEV42EL/SSkEjFahnri12e7YmqfaIhEwM+Hr2P4V3txLiUPAHApPR9xSTmQiEV4MPbum1ASEVH10H7VsdRziYiIyBIGuqne0ljIALASWwYAZOQX23WeYE/Dx/A/GtNa93ubMC+8NbSZxX2Ns8k6R/nofnc1CnS/M7w5Zg4oawwp1nsTH41pjXmjWgGouLSJrReLa6Z0wUdjW+PV+5vatD0REVF10WZzj2wbCu8KmkfKJGK8dn8MVj7ZGQHuCsRnFGDk1/uwbF+CrgnlfTEBCPBgCR0iotpKrKvR7eCBEBFRncNAN9Vbli6MLAXAtTLyDBtV9ouxXiplTHvDrLCH9JpbOUnFGNcp3OK+xhnd7cK9db+7yssD3e3DvfB49yhdKRH9jO6HOobpguLSCgLdtl4sBng44aEOYSxdQkREDpWeV4wtZ9IAAI91i7B5v+6N/PD3iz3RLyYAJSoN3vnjHJbuSwQAq/MyERE5npjNKImIqJIY6KYaVZ2PnwmCYHB8SxdGqgqivelGGd2KChoyWmsoKRGLdHW1bdlXP04t1zuv8ZDFFaWlW8CLRSIiqktWHUqCSiOgY6Q3WoR42rWvr5sCP0zqgHeGN9fNqSGeTujVxL86hkpERFVE28eI312IiMhebEZJNUatEfDgkv3wcVXg+0kdqvTYqw5dw5sbzhgssxRUt9TURKXW4JVfT+HazSKD5RVlNVsLdItEgNRKx0lrAWvDQLfhmCvbP4uP/xERUV1RotJg9aGyciOTukVW6hgikQiPd49CpyhffLvnCsbENrA6bxMRkeNpvyMxzk1ERPZiRjfVmItpZU2gdpxPrzCzW6W23DXRXOkR4yA3YDmoaynQrVRpsOF4su61u0KKPk39Ma1vI6tjtfaFWSwSQSwCOkX6GCzv3sgX7goppvaJNlgu00vp1j9uqdpwzIsfjYVcKsYHd2pz6xvQPFD3+xePtDVY9+W4dpBLxXh/ZEvLb4iIiKgW+Ot0KrIKlAj0UOiaMVdW8xAPLHikHXo2ZjY3EdVf8+fPR8eOHeHu7o6AgACMHDkSFy9erHC/devWISYmBk5OTmjVqhX++uuvGhitZaI7gW5L39uIiIgsYUY31ZhSveC1WiNYLelRYiXQrRYEiFFxNpalR90sXTAVl6oNXv/3Wl94OssgEonw1fh2mL76uNn9pFYzukUQiURYM6UL/ovPwqQfDwMA3h/ZCmHezjibkqfb9vvHOuBUcq7Z4yiNxta9kR/OvTvIbE3ubyfG6t6j8fqu0b4W9yMiIqpNlh9IBABM6BxhcCOYiIjM+/fffzFt2jR07NgRKpUKb7zxBgYOHIhz587B1dXV7D779+/HuHHjMH/+fAwbNgyrV6/GyJEjERcXh5YtHZMco/16xdIlRERkLwa6qcYYBLoFwepfvlKV5YsatUaALT0SLSUAWKrRnV+sMngtl4p12QQKqeEJRaLyR+ms1ui+s0osFkGu9yVdJhFBKhEb7CuTii1muhsH4QHLjSdFIut1wRnkJiKi2u7UjRwcT8qBXGK9qTMREZXbsmWLwetly5YhICAAx44dQ69evczu88UXX+D+++/HK6+8AgB47733sH37dnz11VdYsmRJtY/ZHAlLlxARUSUx4kU2UWsEbD+Xjsx8pW7ZzQIl1h5JwoErN7H7YobB9gev3kR8RoHBMv0s7bTcYvx0IBFL9yVgX3yWyfmUatPArlZFzSS1tpxJRV5xqdn3Ys6CHZcMXuvXzzaODbsrpHrrDIPY+kR6x9APPmvrb+svk4lFFrMWlCrLGe5ERET1zbL9iQCAoa2D4e+ucOxgiIjqqNzcsqdFfXx8LG5z4MAB9O/f32DZoEGDcODAAYv7KJVK5OXlGfxUJe13KGZ0ExGRvZjRTTZZdegaZm86C393BY68WXYh9OaGM9hyNk23zU9PdEKvJv64klmAR749CABI/N9Q3XqVXp3p3h/vNjj+n8/3QMtQT91r45rU+myt1ZZ4swhTVx7Dqqe62LT/xhMpBq/1s60lRg0l3RRS5N3JAJeKRegY5Y198Tfh7mT4v1TjQDfd7/o51trAuH6jSolYhAbeLmbHZi6jm4iIqD66WaDEnydTAQCPdY1w8GiIiOomjUaDGTNmoHv37lZLkKSlpSEwMNBgWWBgINLS0izsUVYL/N13362ysRorL11SbacgIqJ6ihndZJMtZ8oudPQzug8m3DTY5mhiNgDgQmq+2WOoNJazks+lGGYBlFjJYLanKcm++Jsmy2zNCJfoZ2MblSfRf4xaLBbh84fbYnL3SGx4rhsA4Lep3fB0zyi8eF9j3Xb6p9VldIsNM74fjG2AZ3tHY8WTnQzOV8yMbiIiukesOXIdJWoN2jTwRLtwb0cPh4ioTpo2bRrOnDmDNWvWVPmxZ82ahdzcXN3P9evXq/T4YmZ0ExFRJTGjm2xiLjhsfN2hfcTMUkC7xErdbZFRSelSK80orQXMbaG2cX+xQUa34QD7xgTg0+1lpU7yi1UIcHfCnOEtdOtjI7wRG2H45Vz/Qk3bVEv/uFKxGFKJGK8PjjEzZl7kERFR/adSa7Dy4DUAwKRukY4dDBFRHTV9+nT8+eef2LNnDxo0aGB126CgIKSnpxssS09PR1BQkMV9FAoFFIrqKyulfeiVgW4iIrIXM7rJJhqzgW7DZdpgtaWgbImV4LXYKNJtLaP7LuPcsFIVxSLjQLdCWv6/zs0CpfHmZul/htpMbpnEsHQJERGRo11Iy8Os9afw5c7L2H4uHdeziyw2S65q28+lIzW3GL6ucgxtHVwj5yQiqi8EQcD06dOxYcMG7Nq1C1FRURXu07VrV+zcudNg2fbt29G1a9fqGmaFdDW6mexDRER2Ykb3PWLHuXT8dPAaPh7bGoEeTjbtc+DKTXy9Ox5zR7Q0n9Ft9FoEbUa3+QsSa3Wmz6bkYcPxQ3h9cAwi/Vzx6A+HLG6r0mhw41YRZq0/jad6NkTvJv5W30fk65sxrW80zqXkQQCQd9u0QWVFjIPQ+nH5mwUlNh1D/2PRXrxJxOabVRIRETnKJ1svYsd5wybT7gopYoLd0SzYAzFBHugb449gT+cqP7e2CeW4TuFQSCVVfnwiovps2rRpWL16NTZt2gR3d3ddnW1PT084O5f9m/3YY48hNDQU8+fPBwC8+OKL6N27Nz799FMMHToUa9aswdGjR/Htt9867H1IdKVLHDYEIiKqoxjovkc89dNRAMDcP89h0fj2Nu0z7ruyhpIv/3LC/GNjRovEFWR0K60Eun/cl6A754TOEcgpshyMVmsEvLHhNPbF38R/l7Nw9YMhVt5FmUX/XDFZ5uksQ66NQW/jGt0hXs7oHOWDQwnZGBNr/XFAreYhHlaPa5zVDgAv9GuEhbviMa1vtE3nICIiuhsajYCj124BAO6LCUByzm1cySxAvlKFI4m3cCSxbJ2HkxTbXuqNIE/bbp5X5FJ6Pj78+wIOJWRDIhZhQpfwinciIiIDixcvBgD06dPHYPnSpUvx+OOPAwCSkpIgFpc/VdqtWzesXr0ab731Ft544w00btwYGzdutNrAsrqVN6NkpJuIiOzDQPc9JtvG7GN9NwtL4Cqv+K+Ktqa1pYxupQ0NFfOLVYjPKLC6jUojICWn2K7jmjN/dCs8tyrOpm31M6/nDG8OF7kUPz3ZCak5xYj0c7XpGD6uchx64z44y8sz1CrK4n5pQBM80DYU0f62nYOIiOhuXM0qQE5RKRRSMRY/Ggu5VIwSlQZXMgtwIS0P51PzseVMGpKyi/DZ9ov4aGybuzpfWm4xPt9+CeuOXYdGKJtv/29g02rJFiciqu9sKTO1e/duk2UPPvggHnzwwWoYUeVoE4AY5yYiInsx0H2PqUx5DGeZxOzddEvXHZZqqVkrXaLvZqH1mtcajWCQNW7rcY3p18euiH6gW1v6RSGV2BzkNt5XSyq2PgaRSIRGAW52nYOIiKiyjt3J5m4T5gX5nX4UcqkYzYI90CzYA6PaAYNaBGHM4v1Yd+wGJnePQrNg0yeWKpJXXIolu6/gx30JKC4tu2F9f4sgvHJ/U0T7c94jIrqX6Wp0M9JNRER2YqD7HlOZhofOcgnyi1Umy40vPLSVN/QzugVB0F2oaL/IVuR4Uo7V9Yk3iwwC3edS82w6rjE74twVlhipLNblJiKi2uTondIkHSK8LW4TG+GNIa2C8NfpNMz/+wJ+eqKTzccvUWmw8uA1fLnrMm7dKVPWMdIbrw9uhlgr5yQionuHriQmA91ERGQnBrrvMca1pm3hIpdYrZmtpQ0AqzXlAW21RtAFc5WqymVeG3v6Tr1xrQnfW25caY2kgmxqS9tW5maBJfp/HpX5syEiIqpK2ozuDpHWg86vDorB9nPp2HMpE/9dzkTPxtYbQwNAqVqDx348hINXswEAjQLc8Nr9MejfLEB3U5yIiIilS4iIqLLsyGmtHosWLUJkZCScnJzQuXNnHD582Or2CxYsQNOmTeHs7IywsDC89NJLKC4utroPlatURrdMApXGNBvb+MJDbCajW/8ufKm6dl2p2BNYluh9AbcnE7wiIpEIz/RqiIc7hCHKzjIoREREVelmgRJXswoBAO3DrQe6I/1c8WiXCADAvM3nLTai1jdv83kcvJoNd4UU/xvdClte7IkBzQMZ5CYiIgPa3k+WSmISERFZ4tBA99q1azFz5kzMmTMHcXFxaNOmDQYNGoSMjAyz269evRqvv/465syZg/Pnz+OHH37A2rVr8cYbb9TwyOuuimpCm+Mkk0BtJkgtGFXpFuFORrdav3RJ+fraVmPNnqC/RFI9pUsAYNaQZvhwbGt+0SciIofSZnM3DnCDl4u8wu1f6NcY7k5SXEjLx/q4G1a33XD8BpbtTwQAfP5wWzzSKRzSqrxzTERE9Yb2axrj3EREZC+HfsP47LPP8PTTT2Py5Mlo3rw5lixZAhcXF/z4449mt9+/fz+6d++O8ePHIzIyEgMHDsS4ceOsZoErlUrk5eUZ/NzLbA3u6t89d5FLzNZHM14kMlNLTT/Dy5Zsr5pkT6BbP/u7KkuXEBER1Ra2li3R8naVY3rfRgCAT7ddwu0S8yXKzqXkYdb60wCAF/o1Qv/mgVUwWiIiqq/EbEZJRESV5LBAd0lJCY4dO4b+/fuXD0YsRv/+/XHgwAGz+3Tr1g3Hjh3TBbavXr2Kv/76C0OGDLF4nvnz58PT01P3ExYWVrVvpI6xtflhYUl580lnmcRskNp4iUhXo7t8zQd/ncdHWy5ArRFq3YWKXRnd+oFuZl4TEVE9dPROoLuisiX6JnWLRKiXM9LyivHjvgST9TlFJXhm5VEUl2rQp6k/XuzfpMrGS0RE9ZP2q5dQy74/EhFR7eewQHdWVhbUajUCAw2zegIDA5GWlmZ2n/Hjx2Pu3Lno0aMHZDIZoqOj0adPH6ulS2bNmoXc3Fzdz/Xr16v0fdQ1ttal1s/KkknE5rOxLVx36NfoXnUoCV/vvoK4pFu1LqO7sjW6iYiI6pviUjVO38gFAHSI9LF5PyeZBK8MagoAWLz7CrIKlLp1ao2AF9ecwPXs2wjzccaCh9vyqSgiIqqQLoGKgW4iIrJTnSqOuHv3bnzwwQf4+uuvERcXh/Xr12Pz5s147733LO6jUCjg4eFh8HMvk9hYo7tULyitEQyD11rGNbq15U7MBbSLStS1rsaaPbW29Wt017K3QUTkEJGRkRCJRCY/06ZNAwAUFxdj2rRp8PX1hZubG8aMGYP09HQHj5osOZOcixK1Br6uckT6uti17wNtQtAy1AMFShW+2HFZt/yLHZfw76VMOMnE+ObRDjbV/SYiIiovXeLggRARUZ3jsEC3n58fJBKJyZfe9PR0BAUFmd3n7bffxsSJE/HUU0+hVatWGDVqFD744APMnz8fGo2mJoZd59maxazfUFIjCGY7XhvfYNfecS9Vm/5ZaDTmj+FItpZxAQw/NyYWEBEBR44cQWpqqu5n+/btAIAHH3wQAPDSSy/hjz/+wLp16/Dvv/8iJSUFo0ePduSQyQptfe7YCG+7myOLxSK8MaQZAGD14SRcySzA9nPpWLgrHgAwf3QrNA+5txMNiIjIdtpexbWt9CUREdV+Dgt0y+VyxMbGYufOnbplGo0GO3fuRNeuXc3uU1RUBLFRRrJEIgHA+l3WqPQCzxKxyCDjWqMRzH52Kr0bB2qNYJLRbS5rW3sec4FutUaodY+eiVC5Gt3GmexERPcif39/BAUF6X7+/PNPREdHo3fv3sjNzcUPP/yAzz77DP369UNsbCyWLl2K/fv34+DBg44eOplx1M5GlMa6RfvhvpgAqDUCXv/tFGauPQEAeLxbJEa1a1BVwyQionuALqO7liVKERFR7efQ0iUzZ87Ed999h+XLl+P8+fOYOnUqCgsLMXnyZADAY489hlmzZum2Hz58OBYvXow1a9YgISEB27dvx9tvv43hw4frAt5kqlQvO3vZ/kR0/mAHbhYooVJrcP8Xe/DoD4dM9lFpDDO69QPbf55KQat3tpoEvz/ZdgkrDiSiRGUm0G10jNogv7jU5m31a3TXsng9EZHDlZSUYOXKlXjiiScgEolw7NgxlJaWGjScjomJQXh4uMWG0wCgVCqRl5dn8EPVTxAExOkyum2vz23s9cExEIuAI4m3kK9UoWOkN94c2qyqhklERPcIbZKRmfwpIiIiq6SOPPnDDz+MzMxMzJ49G2lpaWjbti22bNmia1CZlJRkkMH91ltvQSQS4a233kJycjL8/f0xfPhwzJs3z1FvoU4wDjxnFZRg5cEkDGwRiEvpBbiUXgCVWgOppPyzVhmVLtEPak9ffdziud7edBYj2oaYLNdoBJNHzwLcFWgW7IF/L2Xa/Z6qQqsGnnh/ZEt8tv0SnGUSJOfctrgtm2cREVm2ceNG5OTk4PHHHwcApKWlQS6Xw8vLy2A7aw2nAWD+/Pl49913q3GkZE5CViFuFpZALhWjZWjlS4w0DnTHI53CsfpQEgLcFVg0vj1kkjrVDoaIiGoBqS7QzUg3ERHZx6GBbgCYPn06pk+fbnbd7t27DV5LpVLMmTMHc+bMqYGR1R8lZm6FS8SAQlr+5bOwRA1P5/LXhuVN7DufstR0B5XGNKP70Bv3QSQS4Xp2EXp+9I9uubuTFPnFKqvn2PZSLwz8fI9N41k2uSMeX3rEYNm0vtFQSCV4tEsEJnQOxzMrjlkNdOvXK2VCNxGRoR9++AGDBw9GSIjpjU57zJo1CzNnztS9zsvLQ1hY2N0OjyqgLVvSpoEnFNK7e0Ju1uAY+LkpMKx1MAI8nKpieEREdI+R3El2M36CmIiIqCIOD3RT9TNXM1siFhtkKRcoVfB0lpXvo1+j285aHcUqtcmysvInhsu0wWOFzKjuug3Z0y5y27+Im8smk+uVurG36RbrwRMRlbt27Rp27NiB9evX65YFBQWhpKQEOTk5Blnd1hpOA4BCoYBCoajO4ZIZxxLLAt3tIypXn1ufu5MMMwc0uevjEBHRvUsq0WZ083sXERHZh8+T3gPM1cyWiA3vkBcqDTOo9S8qkm4W2XW+3RdNS5HkF6uw43y62e2Ns8ckNgSeXeS236ORmgmcy6SGy3gJRURUOUuXLkVAQACGDh2qWxYbGwuZTGbQcPrixYtISkqy2HCaHOfotWwAQIe7qM9NRERUVbTNKJnRTURE9mJG9z3AXOkSsUhk0MW6wCjQrV+j+3Bi9l2P4a2NZwxe68eynSqR0a1fdqUi2owAg3MYBdObB3tg+znzgXhjfm7MNiQiAgCNRoOlS5di0qRJkErLLyk8PT3x5JNPYubMmfDx8YGHhweef/55dO3aFV26dHHgiMnYrcISXMksBADEVkFGNxER0d3SJirl3S518EiIiKiuYUb3PcBczWyJWGQ1o1tVzY0/9APNCqkEXzzS1mBsFdEvR6KQijG9byM806uh+XOJxfhjeg9M0VtvnDQ+tU80XryvsdVzfv9YB7wzvDlahnpWOD4ionvBjh07kJSUhCeeeMJk3eeff45hw4ZhzJgx6NWrF4KCggzKm1DtEJdUVrakob8rfFzlDh4NERFR+ffBbefS8eepFAePhoiI6hIGuu8B5mpmS8Uig/IkpoHu6n1MzDjQPKJtqF37y/SytCN8XfB/g5pi1pBmaBfuZbKtVCxCqwaeeHlgec1QsdEAnGQSvDSgidXa3/2bB+Lx7lF2jZOIqD4bOHAgBEFAkyamNZmdnJywaNEiZGdno7CwEOvXr7dan5scQ9uIsgOzuYmIqJbQfyL39d9OO3AkRERU1zDQfQ8oLjUNdIuNMroLlIbb6JcuqQ7WGkDa0uvR0v7m6ntrL5RkYv51JyIi0qdtRMn63EREVFvoP+Fb8bO+RERE5Rj5q0P+uZiB0V/vQ3xGgcHywwnZGPX1Ppy+katbtnDnZUxeehilao3Z0iVvbjgDpV4A/P/WnURyzm18ufMyHl96GLfNBMerkg3VSSp3XDMH1tZ4019nKVDOCykiIrpXlKg0OHkjBwAQG8mMbiIiqh2kBt/bHDgQIiKqc9iMsg6ZvPQIAOD5n4/j7xd76pY/9M0BAMDEHw/hxOyBAIDPtl8CAGw9m2bxeH+fMVz3zu9ndQ0Zq/t6wlzmta3ahHkZvFaqygP55o5rXKYEYECbiIjoTEoulCoNvF1kaOjn6ujhEBERASjrsaRlLpGJiIjIEga666DsQqXZ5TlFpl2pi5RqixcHxnW584vL90/KLrqLEVbMaukSlNcu6d7IF/vibwIAfp/eHSFeznB3Mvxrm11Qovvd1uoklk5fvQVbiIiIasbFtHwkZBViUItAi3OutmxJbIS31XmZiIioJulndJtLWiIiIrKEge46yJYa1lpqQUCpyrR0CQCDZpQAINWLEmfkmQ+mVxVr1yv676+BlwuAskC3v7sCfm4Kk+3z9QL2ZrO3bczyJiIiqg+2nEnFC2tOoESlwYOxDTB/dCtIJaZ3go9eywYAxLI+NxER1SJi1ugmIqJKYo3uOkg/PK0xClZfzSxAnl5mtlojoNhMjW4ASMm9bfA6IatQ93u+UbZ3VbM10CzR67htHJg3u72Z7HVzZ7J0el5IERFRXbby4DU8tyoOJXducq87dgPPrDiG2yWGvTcEQcCxa3caUbI+NxER1SJSG3orERERmcNAdx2kn/H81T/xBuv6ffoven30j+51WaDbfGPJg1ezDV4n59w2u111CPdxsbhOP5wt18tAkxrVJYn0dTHZJtjTyeR4cqnpX3NPZ5nZc4dZGRcREVFtJQgCFuy4hLc2noFGAMZ1Csc3E2OhkIqx80IGJnx/EDlF5aW+krKLkFVQArlEjFahng4cORERkSEJm1ESEVElsXRJnVQeCl6487LJWv1a3WqNAKWFQLejuMglWDS+vcX1+oF8hUyMF/o1wu1SNYKMgtg/Pt4R8zafx7R+jXTLXh0Ug+zCEoyNDcPp5FwUKVUI8XLWrZ83qiWOJGRjaKtgs+de8mgs3t98DlP7NDK7noiIqLZRawTM3nQGqw4lAQBe6NcILw1oApFIhFVPdcaTy48iLikHY5ccwE9PdEKIlzOO3qnP3TLUA04yiSOHT0REZMCwRrcDB0JERHUOA911kH4g2FkmsVpmRCMIUFqo0V1dGgW4IT6jwOL6HyZ1RLiv7ZnTMwc2Nbu8ob8bfni8o8Eyb1c5vpnYAQAwoHmgyT4TOkdgQucIi+eK9HPF95M6WlxPRERUmxSXqjFjzQlsOZsGkQiY+0ALTOwaqVvfIdIH657tisd+OIz4jAKMWbwfy5/ohKO6siWsz01ERLWLfka3hCndRERkB5YuqYP0S3s4y61nYVkrXVJdpBXcdjdXR9uQHd02iYiI6qifDiSi10f/4M0Np3HsWjYEe7pNA8grLsWkHw9jy9k0yCViLBrf3iDIrdUk0B2/PdcNjQLckJpbjAeXHMDO8+kAgNgI1ucmIqLaRb9kJWt0ExGRPZjRXQdp9L4IVxToVllpRlldZBLr908qWG2QsS5ie0giIqqHUnNvY97m81CqNFh1KAmrDiUh3McFI9uFYnS7UET6uZrd73aJGpfS83E+NQ/L9ifiQlo+3BRSfDsxFt0a+Vk8X6iXM9Y90xVPLD+C40k5uuUMdBMRUW3DGt1ERFRZDHTXQcalS6xvK6BEXdOBbutXI2I7rlZ6WPnSTkREVFd9svUSlCoNWjfwRKMAN2w5k4ak7CIs3HkZC3deRrtwL4xuF4pgT2dcSMvD+dR8nE/LQ2JWITR61wF+bgosm9wRLW1oKOntKseqpzpj+urj2HUhA9H+rvBzU1TjuyQiIrKfVO/7pJ0POxER0T2Oge46SLAjo1utMcwAr0rrn+uG0V/vN1kurTCj23qgWwBw6I37cCWzAN2iGegmIqL65VxKHtYfvwEAmDuiJdqGeeH9kSpsO5uODceT8d/lTBxPyjHIvNbn6ypHs2APtAjxwMSuEWjgbXvfCxe5FN9MjMW6ozfQukHFwXEiIqKapp8YlZxzG/+37iQ+ebCNA0dERER1BQPddVxFGd1qjQZqTfUEutuHm3/c+W4zugVBQKCHEwI9nCo9NiIiotpq/t/nIQjAsNbBaBvmBaAsAD2yXShGtgtFRn4xfj+Rgj9PpaK4VI2YIHc0C/ZAs2APxAS7I8D97uZHmUSM8Z3Dq+CdEBERVT3jnk+/HrvBQDcREdmEgW4HKy5Vw8lCsLq4VA2RCFBIDdcbNKOsKNAtCDX+uJd+8xBzKgx0V+VgiIiIapF/L2Xiv8tZkEvEeO3+GLPbBLg74ameDfFUz4Y1PDoiIiLHq+gJYCIiIksqaAtI1SkxqxDt5m7HmxtOm6ybtf40Yt7egqZvbUF6XrHBOv3AdUWNH9UaVFtGtyUVN6O0fuHiJLUevCciIqqL1BoBH2w+DwB4rGsEwnxsLzlCRER0r5BW8IQwERGRJQx0O9DSfQm4XarGqkNJJut+Ply+bN3R6wbr9Gt0e7nIrJ5DrdFUS43u7x7rYHFdRaVLLMXBv57QHg28nfHNxNi7GRoREVGt9NuxG7iYng8PJymm92vk6OEQERHVSsalSwBApdY4YCRERFTXsHSJA3k6Ww9SW6Iftq4oW7tULaA6EroHNA80eN0mzAsnr+cAqLg0iaX1Q1oFY0ir4CoZHxERUW1SVKLCp9svAgCe79cYXi5yB4+IiIiodpKYKYVZrNLArYInh4mIiDhTOJD+l9yiEpXF7YwTsvVfVxTEVqqqJ6PbmFw/i7uCJ81Yc42IiO41P/yXgPQ8JRp4O+OxbhGOHg4REVGtZe7r4u0Sdc0PhIiI6hxmdDuQXFp+nyEjT4lIP/N/HIcSstHkbJru9e1SNX46kIhu0b4VBrH1S6DcLXeFFPlK8wF5/brcFYWxK8r4JiIiqk8y85VY8u8VAMCr98eYNJkmIiKicua+4haXMtBNREQVY0a3A5Xq1RnLLFBa3G5vfBaeWXHMYNnsTWfR/7M9NZKtraUtKxLk4WSyTj/QXVHGNjO6iYjoXrJgxyUUlqjRpoEnhrdmiS4iIiJrzH3DZaCbiIhswYxuB9IPdKvUlQtYV1Sjuyq9Pbw5Iv1cMaRVkMk6/UC3t4scu17uje3n0hGXdAtbz6YbbMuMbiIiulfEZ+RjzZGyptJvDGkGEedAIiIiq8wlc91moJuIiGzAjG4HKlGVB7qFSmZm12RGt5tCiql9ohHh62qyTqZXo9vPTY6G/m54pnc0pGYahghm79ETERHVP//7+wLUGgEDmgeic0NfRw+HiIio1os0832TNbqJiMgWDHQ7UIleFre6soFuTcXb1AT9LG1fN4Xud5XadIA1GJsnIiJyiOSc25j5ywnsOJ8BiViE1wfHOHpIREREdYJELMLSyR0NljGjm4iIbMFAtwPpZ3RP/OEwtuo1nLRVZQPkVU0s1s/oLg90l5opyVKTWehEREQ1KbeoFPP/Oo++n+zG+rhkAMAL/Roj2t/NwSMjIiKqO2Riw1AFa3QTEZEtGOh2oFKjbGfjhpO2qGzJE30+rnKzy1s38Kxw3+FtQgAAU3o2RPNgD0jEInRu6KNbP61vIwDAmPYN4O4khVwqRqCZZpZERFS3JCcn49FHH4Wvry+cnZ3RqlUrHD16VLdeEATMnj0bwcHBcHZ2Rv/+/XH58mUHjrh6FZeq8e2eK+j18T/4Zs9VlKg06NLQB5umdceL/Rs7enhERER1ikRs2NOiuLSWPMpMRES1GptROpB+Rndl3W0zypNzBuKbf6/g691XAACTu0di6b5EAICXixxT+0Rj8Z115ix8pC3mjWoJDycZNk7rDpVGAxd5+V+r2AhvnJwzEB5OUpSoW0IQDBtXEhFR3XPr1i10794dffv2xd9//w1/f39cvnwZ3t7eum0++ugjLFy4EMuXL0dUVBTefvttDBo0COfOnYOTU/254anRCNh4IhmfbruE5JzbAICmge54fXAM+jT1Z/NJIiKiSjAOdBsniREREZnDQLcDVcVkbaYyiF08nWUG9bX93cvLjohQ1oDSGpFIBA8nGQBALhVDbuYhAU/nsvUKqeTuBktERLXChx9+iLCwMCxdulS3LCoqSve7IAhYsGAB3nrrLYwYMQIA8NNPPyEwMBAbN27EI488UuNjrg63CkswZcVRHEm8BQAI9nTCzAFNMLp9A5Mv6ERERGQ743lUdZcJXkREdG9gaq2DnE/N02V+6btdosbhhGybj1MVpUv0ryHketnWIpFhk0kiIiIA+P3339GhQwc8+OCDCAgIQLt27fDdd9/p1ickJCAtLQ39+/fXLfP09ETnzp1x4MABi8dVKpXIy8sz+KmtknNuY+yS/TiSeAvuCileHxyDf/6vDx7sEMYgNxER0V1iRjcREVUGA90OkJhViMFf/If/LmeZrJv5ywk89I3lIICxqpjw9R+rlupdUHg4yQwyvImIiADg6tWrWLx4MRo3boytW7di6tSpeOGFF7B8+XIAQFpaWXPlwMBAg/0CAwN168yZP38+PD09dT9hYWHV9ybuwsW0fIz5ej+uZBYi2NMJ65/rhmd7R8NJxieXiIiIqoLUJNDNjG4iIqoYS5c4wMkbORbX/X3GcgDAnIqacohEgDbpO9TLGY0D3ZB7uxTJt25j8aOxAAyztiUSMd59oAX+vZSJZ3tHo0mgG45du4Uueg0miYjo3qbRaNChQwd88MEHAIB27drhzJkzWLJkCSZNmlTp486aNQszZ87Uvc7Ly6t1we4jidl4ctkR5BWr0DjADcuf6IQQL2dHD4uIiKheMX6ymBndRERkCwa6HaAqG1MVl6qtrn9zSDO8v/k8AOCjsa3RvZGfyTb6N8ulYhHGdYnApG6RumXzR7eqkrESEVH9EBwcjObNmxssa9asGX777TcAQFBQEAAgPT0dwcHBum3S09PRtm1bi8dVKBRQKGrvk0Tbz6Vj+uo4KFUaxEZ444dJHeDlInf0sIiIiOodqcSoRjcD3UREZAOWLnGAqizdqVRZn/D174Rbiq+L9QbEuqJERFSR7t274+LFiwbLLl26hIiICABljSmDgoKwc+dO3fq8vDwcOnQIXbt2rdGxVpW1R5LwzIqjUKo0uC8mACuf7MwgNxERUTUxzehm6RIiIqoYA90OIELVBZMTsgqtrtePW9vSWNK4FhoREZGxl156CQcPHsQHH3yA+Ph4rF69Gt9++y2mTZsGoOzJpRkzZuD999/H77//jtOnT+Oxxx5DSEgIRo4c6djB20kQBCz6Jx6v/XYaGgF4MLYBvpkYC2c563ETEVHts2fPHgwfPhwhISEQiUTYuHGj1e13794NkUhk8mOtp0ZNMJ5nWbqEiIhswdIlDmAtluymkKJAqaqyc0lsyNY2qNHNQDcREVWgY8eO2LBhA2bNmoW5c+ciKioKCxYswIQJE3TbvPrqqygsLMSUKVOQk5ODHj16YMuWLXBycnLgyO236UQKPt5alr3+XJ9ovDKoaZWWICMiIqpKhYWFaNOmDZ544gmMHj3a5v0uXrwIDw8P3euAgIDqGJ7NQjwNrxdUGmZ0ExFRxRjodgBrX5A1QtVO4PplSSzFsA1rdDPJn4iIKjZs2DAMGzbM4nqRSIS5c+di7ty5NTiqqncoIRsAML5zOF69P8bBoyEiIrJu8ODBGDx4sN37BQQEwMvLq+oHVEkikQgz+jfGgh2XAQAlFZTsJCIiAli6xCGsJU1X9Z1qiUg/0M2MbiIiIntkFSgBAC1CPCrYkoiIqO5q27YtgoODMWDAAOzbt8/qtkqlEnl5eQY/1WFG/yZ4tnc0AEClYaCbiIgqxkC3A1irla2p4kC3YUa3+fOKDDK6GegmIiLSyswvC3T7uykcPBIiIqKqFxwcjCVLluC3337Db7/9hrCwMPTp0wdxcXEW95k/fz48PT11P2FhYdU2PnensofQS1UsXUJERBVj6RIHsFba0+EZ3RIGuomIiLR0gW53BrqJiKj+adq0KZo2bap73a1bN1y5cgWff/45VqxYYXafWbNmYebMmbrXeXl51Rbs1iZilTKjm4iIbMBAtwNYy+iuCq0beKJEpcGTPaIMSpFYKr8tZkY3ERGRCUEQkFnAQDcREd1bOnXqhL1791pcr1AooFDUzLwok5R9iS1VM6ObiIgqZnfpksjISMydOxdJSUnVMR6qAsGeTtgyoxce7BBmY+kS1ugmIroXcA63T16xStf8yo+lS4iI6B5x4sQJBAcHO3oYAADZnSeOVWpmdBMRUcXsDnTPmDED69evR8OGDTFgwACsWbMGSqWyOsZWb2mE6r0brV/9RD9ubbl0SfnvUktp30REVOdxDrePtmyJh5MUTjKJg0dDRERUsYKCApw4cQInTpwAACQkJODEiRO6m9yzZs3CY489ptt+wYIF2LRpE+Lj43HmzBnMmDEDu3btwrRp0xwxfBPlGd0MdBMRUcUqFeg+ceIEDh8+jGbNmuH5559HcHAwpk+fbrVhhSWLFi1CZGQknJyc0LlzZxw+fNjq9jk5OZg2bRqCg4OhUCjQpEkT/PXXX3af15HUVVyH25h+HF1ikK1tfntmdBMR3Ruqeg6v71ifm4iI6pqjR4+iXbt2aNeuHQBg5syZaNeuHWbPng0ASE1NNXiyq6SkBC+//DJatWqF3r174+TJk9ixYwfuu+8+h4zfmJSlS4iIyA6VTt9t3749Fi5ciJSUFMyZMwfff/89OnbsiLZt2+LHH3+EYEPW8tq1azFz5kzMmTMHcXFxaNOmDQYNGoSMjAyz25eUlGDAgAFITEzEr7/+iosXL+K7775DaGhoZd+GQ1R3Rrf+Z69fukRkQzNK1ugmIqr/qmIOvxewPjcREdU1ffr0gSAIJj/Lli0DACxbtgy7d+/Wbf/qq68iPj4et2/fxs2bN/HPP/+gb9++jhm8GdrSJczoJiIiW1S6GWVpaSk2bNiApUuXYvv27ejSpQuefPJJ3LhxA2+88QZ27NiB1atXWz3GZ599hqeffhqTJ08GACxZsgSbN2/Gjz/+iNdff91k+x9//BHZ2dnYv38/ZDIZgLJ6o3VNNSd0GwTS9TO6bSldwoxuIqL6ryrm8HtBeUa3k4NHQkREdG/Sli7JvV2Kxbuv4P6WQYjyc3XwqIiIqLayO9AdFxeHpUuX4ueff4ZYLMZjjz2Gzz//HDExMbptRo0ahY4dO1o9TklJCY4dO4ZZs2bplonFYvTv3x8HDhwwu8/vv/+Orl27Ytq0adi0aRP8/f0xfvx4vPbaa5BIzNfOVCqVBvVH8/Ly7Hm71aK6S5foH14/cC2xJaNbwkA3EVF9VVVz+L1CF+hmI0oiIiKH0Aa6z6bk4WxKHj7ddhHxHwxx8KiIiKi2sjvQ3bFjRwwYMACLFy/GyJEjdZnV+qKiovDII49YPU5WVhbUajUCAwMNlgcGBuLChQtm97l69Sp27dqFCRMm4K+//kJ8fDyee+45lJaWYs6cOWb3mT9/Pt59910b313NqP5mlJZKl5jfXmTQjJKBbiKi+qqq5vB7BWt0ExEROZZxIpaquh+PJiKiOs3uQPfVq1cRERFhdRtXV1csXbq00oOyRKPRICAgAN9++y0kEgliY2ORnJyMjz/+2GKge9asWZg5c6budV5eHsLCwqp8bPao7kC3PoPSJRaC2IbNKCtdtp2IiGo5R87hdRFrdBMRETmWm6LS1VaJiOgeZHdUMyMjA4cOHTJZfujQIRw9etTm4/j5+UEikSA9Pd1geXp6OoKCgszuExwcjCZNmhiUKWnWrBnS0tJQUlJidh+FQgEPDw+DH0erjj4aD3coD94bZnSXb2O5dEn578zoJiKqv6pqDr9XaDO6/dzkDh4JERHRvcnDyfTpMyIiIkvsDnRPmzYN169fN1menJyMadOm2XwcuVyO2NhY7Ny5U7dMo9Fg586d6Nq1q9l9unfvjvj4eGg05ZHiS5cuITg4GHJ53fkSWh0Z3c/2iS4/vl4gXWzQjNL8vmKDjG4GuomI6quqmsPvFSxdQkRE5FgezszoJiIi29kd6D537hzat29vsrxdu3Y4d+6cXceaOXMmvvvuOyxfvhznz5/H1KlTUVhYiMmTJwMAHnvsMYNmlVOnTkV2djZefPFFXLp0CZs3b8YHH3xQ576ca6qhrph+traA8uPrB64tly4p/50Z3URE9VdVzuH1nVojILuQgW4iIiJH8nRmRjcREdnO7tujCoUC6enpaNiwocHy1NRUSKX2He7hhx9GZmYmZs+ejbS0NLRt2xZbtmzRNahMSkqCWK/2RlhYGLZu3YqXXnoJrVu3RmhoKF588UW89tpr9r4Nh6qO/hn6wW394+uHrcUWSpeImNFNRHRPqMo5vL67WaiERih7GsrXlYFuIiIiR3CWSSreiIiI6A67v9UOHDgQs2bNwqZNm+Dp6QkAyMnJwRtvvIEBAwbYPYDp06dj+vTpZtft3r3bZFnXrl1x8OBBu89Tm6iruRllQz9X3e/6sW1LMWxBbzxSNqMkIqq3qnoOr8+0ZUt8XBW8CUxEROQgIgvJWkRERObYHej+5JNP0KtXL0RERKBdu3YAgBMnTiAwMBArVqyo8gHWR/aULvFzk2Nk21B8vzdBt6x/s0A81KEBpqw4BgBwkokR4euK36Z2xYbjyXhlYIzZY1kqXaJfM1wi4YUEEVF9xTncdqzPTUREREREVLfYHegODQ3FqVOnsGrVKpw8eRLOzs6YPHkyxo0bB5mM9bNsYU8zyn2v94NCKsGy/YlQ3QmQzx7WHOG+Lrpt/m9gUwBAbIQPYiN8jI6g34zSQqBbr3kla3QTEdVfnMNtx0A3ERFR7eDuJEV+scrRwyAiojqgUgU5XV1dMWXKlKoeyz1DbUdGtzY47SSToEBZNrkbx6sVVuqW2VK6xCCjm4FuIqJ6jXO4bbIKSgAA/m4MdBMRETnS1xPaY+IPhx09DCIiqgMq3Xnq3LlzSEpKQklJicHyBx544K4HVd/ZU6JbG+hWSMUoKEsuMw10S22rq20po1t/PBLWQCMiqvc4h1eMGd1ERES1AxtSEhGRrewOdF+9ehWjRo3C6dOnIRKJdI0MtU0i1Gp11Y6wHtJvRhnl54qErEKL22rDzk56k7s2YC2XiFGi1qBLlG+F++vvZ0w/o9tSHW8iIqr7OIfbLrOAgW4iIqo5169fh0gkQoMGDQAAhw8fxurVq9G8efN7/kksuVFilyAIbFJJRERm2ZYKrOfFF19EVFQUMjIy4OLigrNnz2LPnj3o0KEDdu/eXQ1DrH+0geVWoZ4Y0TbE6rba+VshE5ssO/Jmf+z+vz4G9bqtsVy6xKbdiYiojuMcbrvM/GIADHQTEVHNGD9+PP755x8AQFpaGgYMGIDDhw/jzTffxNy5cx08OscyDnSr+AWWiIgssDvQfeDAAcydOxd+fn4Qi8UQi8Xo0aMH5s+fjxdeeKE6xljvaO5MzC1CPCosFSLSlS4xzej2dJEh0s/V5vNaqr9tT3NMIiKquziH205XuoQ1uomIqAacOXMGnTp1AgD88ssvaNmyJfbv349Vq1Zh2bJljh2cg8klhmGLUrXGQSMhIqLazu5At1qthru7OwDAz88PKSkpAICIiAhcvHixakdXzxSVqJBbVArtvCwWi2wuFeKkn9Ftxzn1H+my9HgXA91ERPeGqprD33nnHYhEIoOfmJgY3fri4mJMmzYNvr6+cHNzw5gxY5Cenl61b6aasUY3ERHVpNLSUigUZXPOjh07dH0zYmJikJqa6sihOZxxRneJioFuIiIyz+4a3S1btsTJkycRFRWFzp0746OPPoJcLse3336Lhg0bVscY640O7+9AUYkaT/WIAlDW+NFS3WxjTnoZ3fbUI5NJKt5Ww0e/iIjuCVU5h7do0QI7duzQvZZKyy8pXnrpJWzevBnr1q2Dp6cnpk+fjtGjR2Pfvn1V9l6qU3GpGnnFKgAMdBMRUc1o0aIFlixZgqFDh2L79u147733AAApKSnw9bXck+lewEA3ERHZyu5A91tvvYXCwrLmiXPnzsWwYcPQs2dP+Pr6Yu3atVU+wPpCoxFQVFLW5OtSRgGAsprZtvZ+NFej2xbNgz0wrHUwAj2cLI+NcW4iontCVc7hUqkUQUFBJstzc3Pxww8/YPXq1ejXrx8AYOnSpWjWrBkOHjyILl263P0bqWZZdxpRyqVieDjZfalERERktw8//BCjRo3Cxx9/jEmTJqFNmzYAgN9//11X0uRepZBIDF4rGegmIiIL7P72NmjQIN3vjRo1woULF5CdnQ1vb292PraiRK+OmDaDWiwWWaybbUy/LpmtWeBAWfb3V+PbW92GpUuIiO4NVTmHX758GSEhIXByckLXrl0xf/58hIeH49ixYygtLUX//v1128bExCA8PBwHDhywGuhWKpVQKpW613l5eXaNqaro1+fmtQ0REdWEPn36ICsrC3l5efD29tYtnzJlClxcXBw4MsczzuhmjW4iIrLErhrdpaWlkEqlOHPmjMFyHx8ffhGsQHGpWve7WhvovlPX1Bb6k3tVf9KMcxMR1X9VOYd37twZy5Ytw5YtW7B48WIkJCSgZ8+eyM/PR1paGuRyOby8vAz2CQwMRFpamtXjzp8/H56enrqfsLAwu8ZVVVifm4iIatrt27ehVCp1Qe5r165hwYIFuHjxIgICAhw8OscyKV3CQDcREVlgV0a3TCZDeHg41Gp1xRuTgeLS8slYOzFLxCKbS5foT+72ZHTbghndRET1X1XO4YMHD9b93rp1a3Tu3BkRERH45Zdf4OzsXOnjzpo1CzNnztS9zsvLc0iwO7OAgW4iIqpZI0aMwOjRo/Hss88iJycHnTt3hkwmQ1ZWFj777DNMnTrV0UN0GOOnoFmjm4iILLEroxsA3nzzTbzxxhvIzs6ujvHUW0pVeWChUFnW4Eossr10iUKvGWVVp3S3CvWs2gMSEVGtVF1zuJeXF5o0aYL4+HgEBQWhpKQEOTk5Btukp6ebremtT6FQwMPDw+DHEZjRTURENS0uLg49e/YEAPz6668IDAzEtWvX8NNPP2HhwoUOHl3twtIlRERkid01ur/66ivEx8cjJCQEERERcHV1NVgfFxdXZYOrT/Qzum/fKWMiFgGlatuyqRUGGd1VO7Zujfyw5NH2aBTgVrUHJiKiWqW65vCCggJcuXIFEydORGxsLGQyGXbu3IkxY8YAAC5evIikpCR07dr1rt9DTdAGuv3cGOgmIqKaUVRUBHd3dwDAtm3bMHr0aIjFYnTp0gXXrl1z8OhqFzajJCIiS+wOdI8cObIahlH/6dfoLiop+10iFiGrQGlpFwMGNbqroR76/S2Dq/yYRERUu1TVHP5///d/GD58OCIiIpCSkoI5c+ZAIpFg3Lhx8PT0xJNPPomZM2fCx8cHHh4eeP7559G1a1erjShrE2Z0ExFRTWvUqBE2btyIUaNGYevWrXjppZcAABkZGQ57wqm2YukSIiKyxO5A95w5c6pjHPWe/l3nojulS0QiETLzi23aXy6pvoxuIiK6N1TVHH7jxg2MGzcON2/ehL+/P3r06IGDBw/C398fAPD5559DLBZjzJgxUCqVGDRoEL7++usqOXdN0NXoZkY3ERHVkNmzZ2P8+PF46aWX0K9fP91TUNu2bUO7du0cPLrahYFuIiKyxO5AN1WOfkZ3oTajWyRC3u1Sm/Y3yOiu6iLdREREdlizZo3V9U5OTli0aBEWLVpUQyOqWszoJiKimjZ27Fj06NEDqampaNOmjW75fffdh1GjRjlwZLXDmild8Mi3BwHYXv6TiIjuPXYHusVisdXSGWq12uK6e5l+oFtLpdFg5sAmOHD1JvKLVVb3NyxdUuXDIyKiewDn8IoJgqALdAcw0E1ERDUoKCgIQUFBuHHjBgCgQYMG6NSpk4NHVTt0aeiLno398N/lLJTweoWIiCywO9C9YcMGg9elpaU4fvw4li9fjnfffbfKBlbfmGuYkVWgREyQB07MHohBC/YgPqPA4v6GzSgZ6SYiIvtxDq9YvlKlm7PZjJKIiGqKRqPB+++/j08//RQFBWXfC93d3fHyyy/jzTffhFgsruAI9Z+2nCdLlxARkSV2B7pHjBhhsmzs2LFo0aIF1q5diyeffLJKBlbfmMvozswvAVDWlFJSQfCaGd1ERHS3OIdXTJvN7a6QwlkucfBoiIjoXvHmm2/ihx9+wP/+9z90794dALB371688847KC4uxrx58xw8QseTMdBNREQVqLIa3V26dMGUKVOq6nD1TrGFjG6tioLXMgkzuomIqHpwDi+XxfrcRETkAMuXL8f333+PBx54QLesdevWCA0NxXPPPcdAN8qTv0pYo5uIiCyokuefbt++jYULFyI0NLQqDlcvKc1kdDcKcNP9XlHwWmHQjJKIiKhqcA43lHnnJrQfA91ERFSDsrOzERMTY7I8JiYG2dnZDhhR7aMLdDOjm4iILLA7o9vb29ugkZUgCMjPz4eLiwtWrlxZpYOrT8x1hn5jSDPd7xKxHYFuRrqJiKgSOIdXLJMZ3URE5ABt2rTBV199hYULFxos/+qrr9C6dWsHjap2YaCbiIgqYneg+/PPPzf4kiwWi+Hv74/OnTvD29u7SgdXn/x/e3ceFlXZ/gH8OwPMsIOAbAqCK66oqIi5pZSamaa/MvNNU6u30jfNVis1K8N6K7WyzVxaNM1el1JzQ0VN3EDcd0VQWQRkhxlm5vz+QA4zzAzrwMzA93Ndc10zz3nOmXtO4XPOPc/cj0qtOxj7udnDw0kmvtbOc8tspXqDt26Nbma6iYio5jiGV01MdHMhSiIiakCffvopRo4ciT179iAiIgIAEBsbi+TkZGzfvt3M0VmGssUoF++5jFeGtuV9MRER6alxovvZZ5+thzAavxKN7ozuijO8tQdpX1d7JGUV6myX2XBBLCIiqhuO4VXjjG4iIjKHQYMG4fLly1i2bBkuXrwIABg7dixeeOEFfPTRRxgwYICZIzS/vGKV+Dw1txh+bg5mjIaIiCxRjRPdq1atgrOzM5544gmd9g0bNqCwsBCTJ082WXCNQU5hCWb8Fo+r6fk67WqN7oxt7dIlBhPdtiYpp05ERE0Yx/CqldXoZqKbiIgamr+/v96ik6dOncKKFSvwww8/mCkqy5GsdY+sKGH5EiIi0lfj7GlUVBS8vLz02r29vfHxxx+bJKjG5Ku9V3DwSgZScop12lUVZnRrly4Z3zsAANDZ31VsC/Fzqb8giYioSeAYXjXO6CYiIrJM2UVK8XmhUm3GSIiIyFLVeEZ3UlISgoOD9dpbtWqFpKQkkwTVmGQVKA22qzTGS5d09HPFP28PgadWDW9XezuceC9SZ1FKIiKimuAYXjXW6CYiIrJM74/qjKd/PAoAKFSqquhNRERNUY2zpt7e3jh9+rRe+6lTp+Dp6WmSoBoTwUi7ukKi20Yr0W0jlaCFuwPs7XTrcns5y+Fib2fqEImIqIngGF45tUZA5v0vqL05o5uIiMii9GvrhQ4+pb90fmfTGfwcm2jegIiIyOLUeEb3hAkT8Morr8DFxQUDBw4EAMTExGDmzJl46qmnTB6gtdMIhlPdJRVqdEu1vnKw4aRtIiKqBxzDK3evUAm1RoBEAnho/aqKiIiovowdO7bS7dnZ2Q0TiJVwti9NYVxOy8e8LecwKSLIvAEREZFFqXGi+8MPP0RiYiKGDh0KW9vS3TUaDSZNmsT6ngZojEzpbuGuu0K0VGtGt/ZzIiIiU+EYXrmysiWeTjLY8ltnIiJqAG5ublVunzRpUgNFY/kcZbq/elaqNJCxvCcREd1X40S3TCbD+vXr8dFHHyEhIQEODg7o2rUrWrVqVR/xWT2hwozuR7v5IaeoBO+O7KjTLq1QuoSIiMjUOIZXrizR7cX63ERE1EBWrVpl7hCsikOF8p55xSXw5LhNRET31TjRXaZdu3Zo166dKWNplCpO6O4T7GHw51XauW3O6CYiovrEMdwwcSFK1ucmIiKySBVvlfOKVUx0ExGRqMa/8Rk3bhw++eQTvfZPP/0UTzzxhEmCalQqZLptpYZPufYsbilndBMRUT3gGF65u/n3E928YSYiIrJIJxLv6bzOK1aZKRIiIrJENU50HzhwAI888ohe+4gRI3DgwAGTBNWYVFyM0tbGcBJbol26hDO6iYioHnAMrxxndBMREVm27gHuOq/zikvMEwgREVmkGie68/PzIZPJ9Nrt7OyQm5trkqAakwp5bsiMLG6lU7qEa2kQEVE94BheOSa6iYiILNv7j3XWeZ3LRDcREWmpcUq1a9euWL9+vV77unXr0KlTJ5ME1ZgIqN6MbilndBMRUT3jGF45JrqJiIgsW4CHo87r3CKWLiEionI1Xoxy7ty5GDt2LK5du4YhQ4YAAKKjo7F27Vr88ccfJg/Q2lWc0W2sRrd2PxvW6CYionrAMbxyrNFNRERkXd7832k81t0f9nY25g6FiIgsQI0T3aNGjcLmzZvx8ccf448//oCDgwNCQ0Oxd+9eeHh41EeMVkul1qBErdFpszMyo1sbF6MkIqL6wDG8cpzRTUREZH1iLt/FsM6+5g6DiIgsQI0T3QAwcuRIjBw5EgCQm5uL3377Da+//jri4uKgVqtNGqC1KlCoELpgF1SaiqVLjMzo1ipxwtIlRERUXziGG6ZQqZFTVFrnk4luIiIi61E2fhMREdV62cMDBw5g8uTJ8Pf3x+eff44hQ4bgyJEjpozNqu25kKaX5AaMz+hWa/W1M5IMJyIiMgWO4foy85UASsdpNwc7M0dDRERE1ZVXrEJWgdLcYRARkQWoUUY1NTUVixYtQrt27fDEE0/A1dUVCoUCmzdvxqJFi9C7d+/6itPqGEtWG2tXqrUT3ZzRTUREplWfY/iiRYsgkUgwa9Yssa24uBjTp0+Hp6cnnJ2dMW7cOKSlpZngk9QPsWyJsxwS/rKKiIis1IEDBzBq1Cj4+/tDIpFg8+bNVe6zf/9+9OzZE3K5HG3btsXq1avrPU5T+nDrefT8cDduZxeZOxQiIjKzaie6R40ahQ4dOuD06dNYsmQJ7ty5g6+++qo+Y7NqxhLatkbqb5eoymt58wabiIhMqT7H8OPHj+P7779Ht27ddNpfffVV/PXXX9iwYQNiYmJw584djB071iTvWR9Yn5uIiBqDgoIChIaGYtmyZdXqf+PGDYwcORIPPvggEhISMGvWLDz33HPYuXNnPUdae490NVyPe895y/1CnYiIGka1a3T//fffeOWVV/DSSy+hXbt29RlTo2BsVraxBHjFRSuJiIhMpb7G8Pz8fEycOBHLly/HRx99JLbn5ORgxYoVWLt2LYYMGQIAWLVqFTp27IgjR46gb9++JovBVO7mM9FNRETWb8SIERgxYkS1+3/33XcIDg7G559/DgDo2LEjDh06hMWLF2PYsGH1FWadfPFkd0x5IAd/JtzBL0duiu2CoF86lIiImpZqz+g+dOgQ8vLyEBYWhvDwcHz99dfIyMioz9ismqzGpUuY6CYiovpRX2P49OnTMXLkSERGRuq0x8XFoaSkRKc9JCQEgYGBiI2NNXo8hUKB3NxcnUdD4YxuIiJqimJjY/XG8WHDhlnseA0A9nY26B3kAUe5TYO+LxERWb5qJ7r79u2L5cuXIyUlBf/+97+xbt06+Pv7Q6PRYPfu3cjLy6vPOK2O1EiJEkeZ4cFYqWKim4iI6kd9jOHr1q1DfHw8oqKi9LalpqZCJpPB3d1dp93HxwepqalGjxkVFQU3NzfxERAQUOO4aku7RjcREVFTkZqaCh8fH502Hx8f5ObmoqjIcM1rc47X2uxtde+tOZ+biIhqtBglADg5OWHq1Kk4dOgQzpw5g9deew2LFi2Ct7c3HnvssfqI0SppNIaHWWe54WoxLF1CRET1zVRjeHJyMmbOnIk1a9bA3t7eZPHNmTMHOTk54iM5Odlkx64KZ3QTERFVjznHa232drqJ7uIS3lMTETV1NU50a+vQoQM+/fRT3Lp1C7/99lutj7Ns2TIEBQXB3t4e4eHhOHbsWLX2W7duHSQSCcaMGVPr964vaiP1wZyMJLpZuoSIiBpSXcbwuLg4pKeno2fPnrC1tYWtrS1iYmLw5ZdfwtbWFj4+PlAqlcjOztbZLy0tDb6+hheQAgC5XA5XV1edR0NhjW4iImqKfH19kZamu4hjWloaXF1d4eDgYHAfc47XOnHY6qYz8hUlZomDiIgsR50S3WVsbGwwZswY/PnnnzXed/369Zg9ezbmz5+P+Ph4hIaGYtiwYUhPT690v8TERLz++usYMGBAbcOuF4IgYPb6BMz+/ZTB7TJbI4tRqvhDKyIiani1GcOHDh2KM2fOICEhQXz06tULEydOFJ/b2dkhOjpa3OfSpUtISkpCREREfXyMOuOMbiIiaooiIiJ0xmsA2L17t8WO19oqzujOL1aZKRIiIrIUhqcXN6AvvvgCzz//PKZMmQKgdNXnbdu2YeXKlXj77bcN7qNWqzFx4kQsWLAABw8e1JsxZk45RSXYePJ2jfdj6RIiIrIWLi4u6NKli06bk5MTPD09xfZp06Zh9uzZ8PDwgKurK/7zn/8gIiICffv2NUfIlRIEQatGt+lKsRARETW0/Px8XL16VXx948YNJCQkwMPDA4GBgZgzZw5u376Nn3/+GQDw4osv4uuvv8abb76JqVOnYu/evfj999+xbds2c32EarO3051Ell3EGd1ERE2dSWZ015ZSqURcXJzOKs9SqRSRkZGVrvL8wQcfwNvbG9OmTavyPRp6RegCpbpW+3ExSiIiakwWL16MRx99FOPGjcPAgQPh6+uLjRs3mjssgwqUahSVlI7fXi4yM0dDRERUeydOnECPHj3Qo0cPAMDs2bPRo0cPzJs3DwCQkpKCpKQksX9wcDC2bduG3bt3IzQ0FJ9//jl+/PFHDBs2zCzx14Siwj303gvpKFRyVjcRUVNm1hndGRkZUKvVBld5vnjxosF9Dh06hBUrViAhIaFa7xEVFYUFCxbUNdRqK1DUbmBVcEY3ERFZsf379+u8tre3x7Jly7Bs2TLzBFQDZbO5nWQ2cJSZ/cduREREtTZ48GAIRtaLAoDVq1cb3OfkyZP1GFX9KBu/y+QpVLiQkouwVh5mioiIiMzNrDO6ayovLw/PPPMMli9fDi8vr2rt09ArQufXMtHN0iVERETmwfrcRERE1mdszxaQ20oxsqsf+rXxBAAkZhSaOSoiIjIns05b8vLygo2NjcFVnn19ffX6X7t2DYmJiRg1apTYptGUJohtbW1x6dIltGnTRmcfuVwOubzhblxrO6M7yNMJNzIKIJWYOCAiIiKqFBPdRERE1qdlM0fEz30IjjIbvLPpLA5fy8TNLCa6iYiaMrPO6JbJZAgLC9NZ5Vmj0SA6OtrgKs8hISE4c+YMEhISxMdjjz2GBx98EAkJCQgICGjI8A0ylOje/epADO/si5+m9jG63/JJvTCssw/+nNG/PsMjIiKiCu7mFQNgopuIiMjaOMltIZFI0LKZAwAgJbvIzBEREZE5mb0Q5ezZszF58mT06tULffr0wZIlS1BQUIApU6YAACZNmoQWLVogKioK9vb26NKli87+7u7uAKDXbi55xbqJ7v5tvdDOxwXfPRNW6X5tvZ3x/TO96jM0IiIiMuBu/v0Z3c5MdBMREVkjBzsbAECxiiVBiYiaMrMnusePH4+7d+9i3rx5SE1NRffu3bFjxw5xgcqkpCRIpdZTSrzijG4pa5EQERFZNJYuISIism5yu9KcQXGJ2syREBGROZk90Q0AM2bMwIwZMwxu279/f6X7Glo12pwKlLoDqw3z3ERERBaNiW4iIiLrZm9bOqNbwRndRERNmvVMlbYSRRUT3ZzRTUREZNEy8pUAmOgmIiKyVpzRTUREABPdJlei1v0GWSphopuIiMiSiTO6ne3NHAkRERHVRtmM7mM3sjB/y1kzR0NERObCRLeJlagFndec0U1ERGS5NBoBGfksXUJERGTN7O8vRgkAP8XexCNLD+JmZoEZIyIiInNgotvE9GZ0M9FNRERksbKLSqDSlH5J7eksM3M0REREVBtlpUvKnE/JxRsbTpspGiIiMhcmuk1MpWHpEiIiImtRVrakmaMd7Gx4WURERGSNykqXaLuTU2SGSIiIyJx4R2dieqVLmOcmIiKyWJkFpYluDyfO5iYiIrJW9nb6qQ2FSmOgJxERNWZMdJuYiqVLiIiIrEZWgRIA4OnE+txERETWSm5gRvfdPAWe+iEWucUlZoiIiIjMgYluEyvRVJzRzUQ3ERGRpSpLdHNGNxERkfUyNKMbAI5cz8L3MdcaOBoiIjIXJrpNKO5mFradTtFps+GMbiIiIouVmX9/RjcXoiQiIrJacjv9Gd1l0nMVDRgJERGZExPdJjTu21i9NpYuISIislzlpUuY6CYiIrJWclvjqY3CEnUDRkJERObERHc9Y+kSIiIiy8XSJURERNZPbiuFu6OdwW3FSia6iYiaCia66xlLlxAREVmujPzSnzN7OHMxSiIiImslkUhw+O0heHlwG71thUx0ExE1GUx01zMpZ3QTERFZLJYuISIiahwcZbbwc3fQa2fpEiKipoOJ7npmwzNMRERksVi6hIiIqPFwMLAoZZFSZYZIiIjIHJiGrWec0U1ERGSZNBoB9wo5o5uIiKixkBlYlJKlS4iImg4muuuZlDW6iYiILFJ2UQk0QunzZkx0ExERWT25gUR3TlGJGSIhIiJzYKLbRDRld8oV2HBGNxERkUXKKihdiNLV3hZ2rDVGRERk9fzc7PXa8opVKFFrzBANERE1NN7VmYhaMJzo5oxuIiIiy5SZf79sibPczJEQERGRKXRr6Y43hnXQay8rVUZERI0bE90mouaMbiIiIqvChSiJiIgan+kPttVru1fA8iVERE0BE90mojEyo5u/hCYiosbm22+/Rbdu3eDq6gpXV1dERETg77//FrcXFxdj+vTp8PT0hLOzM8aNG4e0tDQzRmxYJhPdRERETUJmgQL5ChX2XUyHQsXFKYmIGiumYU1EZWRGN0uXEBFRY9OyZUssWrQIcXFxOHHiBIYMGYLRo0fj3LlzAIBXX30Vf/31FzZs2ICYmBjcuXMHY8eONXPU+spmdHsy0U1ERNSojO3RQuf13TwFxn8fiymrj2Px7itmioqIiOobE90mwsUoiYioqRg1ahQeeeQRtGvXDu3bt8fChQvh7OyMI0eOICcnBytWrMAXX3yBIUOGICwsDKtWrcLhw4dx5MgRc4euQ0x0OzPRTURE1Jh8MKYL/pzxAB7u5AMAmLkuAefu5AIAfj1y05yhERFRPWKi20SM1ujmjG4iImrE1Go11q1bh4KCAkRERCAuLg4lJSWIjIwU+4SEhCAwMBCxsbGVHkuhUCA3N1fnUZ8y8hUAAA8nLkZJRETUmDjLbdGtpTscZTZ622S2TIMQETVW/BfeRNRGanRLOaObiIgaoTNnzsDZ2RlyuRwvvvgiNm3ahE6dOiE1NRUymQzu7u46/X18fJCamlrpMaOiouDm5iY+AgIC6vETsHQJERFRY5ddpL8IpZyJbiKiRov/wpuIRmO4nd8WExFRY9ShQwckJCTg6NGjeOmllzB58mScP3++TsecM2cOcnJyxEdycrKJojUsi4tREhERNWqGfnlddo9+I6MAWxJui9cDRERk/WzNHUBjoTKS6Waim4iIGiOZTIa2bdsCAMLCwnD8+HEsXboU48ePh1KpRHZ2ts6s7rS0NPj6+lZ6TLlcDrm84cqIZDLRTURE1Ki9NTwEB68c0mmT2UhxMukeHv/mMABgUPvm+GlqH3OER0REJsYsrIkYndFtw1NMRESNn0ajgUKhQFhYGOzs7BAdHS1uu3TpEpKSkhAREWHGCHUJgoB7XIySiIioUevSwg0uct35fTJbKbafSRFfx1y+29BhERFRPeGMbhMxVqPbjoluIiJqZObMmYMRI0YgMDAQeXl5WLt2Lfbv34+dO3fCzc0N06ZNw+zZs+Hh4QFXV1f85z//QUREBPr27Wvu0EW5RSqo7v+cmTO6iYiIGrEKy2adu5OLri3czBMLERHVKya6TcRQ7S+ApUuIiKjxSU9Px6RJk5CSkgI3Nzd069YNO3fuxEMPPQQAWLx4MaRSKcaNGweFQoFhw4bhm2++MXPUujILFAAAZ7kt5LY2Zo6GiIiI6o2BW/V1x8vXAQlr1awBgyEiovrERLeJGEt029lIDLYTERFZqxUrVlS63d7eHsuWLcOyZcsaKKKa40KURERETYO7kx3yFCqj2xUqdQNGQ0RE9YnTjU2EM7qJiIisBxeiJCIiahqWPd0Trb2c8MWToXr1ugFAUVK+4JYgCNh2OgXX7+Y3ZIhERGQinNFtIhojNbq5GCUREZHlKZvR7clENxERUaPWraU79r4+GADwYAdvDPrvPuQWl8/wVqjKE917LqRj+tp4AEDiopENGicREdUds7AmwhndRERE1oOlS4iIiJqeZk4yhPi66rQVlZSXLjmemNXQIRERkQkxC2siKqM1unmKiYiILE1m/v0Z3c5yM0dCREREDam9r7PO67t5CoR9uBvpucVQqQ3f1xMRkXVgFtZEjJYu4YxuIiIii5NZoADA0iVERERNzbT+reEks0HPQHexLbNAiUe/OgS1RmN8RyIisnjMwpqI0dIlnNFNRERkcVi6hIiIqGkK9nJC3NyHsGxiT5329DwFEjMLzRQVERGZArOwJqJhjW4iIiKrUVa6xMOZiW4iIqKmxt7OBo52tnrtMZfvmiEaIiIyFWZhTYQ1uomIiKxH2Yxuli4hIiJqmuR2ld+rC0bKkxIRkeViFtZE1KzRTUREZBUEQWDpEiIioiauqjKjSjXrdRMRWRtmYU3EWOkSOxtJA0dCRERElclXqMSbV08nuZmjISIiInOQSiu/V5/zvzN4ZsVRKFVMeBMRWQv9olRUK1yMkoiIyDqUzeZ2sLOBg8zGzNEQERGRJdp48jYAYM3Rm4ho44kQX1czR0RERFVhFtZEjCW6JRLO6CYiIrIkmSxbQkRERACm9Q/GA209sWR8d6N9Fvx1HsOXHISKpUyIiCweZ3SbSMUa3W8M6wBvF/4cmoiIyNJk5d9fiNKZiW4iIqKmbO6jnQAARUo12nk740p6vtG+OUUl8HQuvcfPKy5BkVINb1d7cfvhaxlo7eUMXzd7Y4cgIqJ6xkS3iVSc0T39wbZmioSIiIgqw4UoiYiISJuDzAa7Xh0IAOj54W7cKyzR67Pqn0QcupqB7/4VhuFLDyC7sAQJ8x6Cu6MMh69l4OnlR+Est8Xp+Q9XWf+biIjqB0uXmIhGMFy6hIiIiCwLS5cQERFRRRKJBBKJBI4yw/MBv953FQnJ2Xhn0xlk30+Ef77rMvKKS7D3QjqA0gWv+y3aixwDifIyGfkKfL33CtJyi03/IYiImjgmuk3kt2PJ5g6BiIiIqiEzXwEA8HJmiTEiIiLSdTu7qNLtey+mi89/OXITczefhVKrfndqbjE2nrxldP/pa+Lx2a7LmLr6eN2DJSIiHUx0m8jte+WD4aPd/MwYCREREVWGpUuIiKgxW7ZsGYKCgmBvb4/w8HAcO3bMaN/Vq1eLM5nLHvb2rDFdE5sT7qCkwkKV+cUqPLvqGGatO6nX/+iNLADAuTu5DRIfEVFTwkS3iRSXqAEAi8eHVrpiMxEREZkXS5cQEVFjtX79esyePRvz589HfHw8QkNDMWzYMKSnpxvdx9XVFSkpKeLj5s2bDRix5flX30Dx+esPt4ePa+W/AJPbSpFbrNJpW3U4Efsv3cXmhDsoVKqM7ElERKZmEYnumnzjvHz5cgwYMADNmjVDs2bNEBkZWWn/hpKvKB28egd5wNbGIk4rERERGVA2o9uTiW4iImpkvvjiCzz//POYMmUKOnXqhO+++w6Ojo5YuXKl0X0kEgl8fX3Fh4+PTwNGbHk+GtNVfN6tpTtGdvWvtL+nkwx3cxU6bWXXGgBQqFSbNkAiIjLK7BnZmn7jvH//fkyYMAH79u1DbGwsAgIC8PDDD+P27dsNHHk5lVoDhar0p0rOcsMLVxAREZFlYOkSIiJqjJRKJeLi4hAZGSm2SaVSREZGIjY21uh++fn5aNWqFQICAjB69GicO3eu0vdRKBTIzc3VeTQ2a54Lx1vDQzCgnRdeHNwa74/qhJNzHzLY10lui7Q84wtLFipKE92CIOBk0j2dbTlFJTh6PROCIJgueCKiJszsie6afuO8Zs0avPzyy+jevTtCQkLw448/QqPRIDo6uoEjL1egKP+G1omJbiIiIouWWVA668rTiYtREhFR45GRkQG1Wq03I9vHxwepqakG9+nQoQNWrlyJLVu24Ndff4VGo0G/fv1w65bxxRSjoqLg5uYmPgICAkz6OSzBA2298NLgNpBIJPB2scezDwSjmZMMq6f01usrAEjLrSTRXVL66++/Tqfg8W8O62x7evkRjP/hCP46nSK2KVUanL6VDY2GyW8iopoya6K7tt84ayssLERJSQk8PDwMbm+Ib5vz79fcktlKYceyJURERBarUKlCcUnpr7A8nDmjm4iImraIiAhMmjQJ3bt3x6BBg7Bx40Y0b94c33//vdF95syZg5ycHPGRnJzcgBGb1+AO3nptaTnF4rWFIWUT4zac0D9PZQtSbjlZ/gv1+X+exWNf/4OV/9yoa7hERE2OWbOytfnGuaK33noL/v7+OslybQ3xbXPB/frcLFtCRERk2TLzS8uWyGylcJLZmDkaIiIi0/Hy8oKNjQ3S0tJ02tPS0uDr61utY9jZ2aFHjx64evWq0T5yuRyurq46j6Zk8fhQndd5isoXmzx6IxO3s4vg5Wz8l2T2duXXJL8dK02If7VX/7/BmqM3se5YUk3CJSJqUqx6+vGiRYuwbt06bNq0Cfb29gb7NMS3zWULUTrJecNMRERkybQXopRIJGaOhoiIyHRkMhnCwsJ0ynqWlfmMiIio1jHUajXOnDkDPz+/+grT6j3eoyVaezlVu/+nOy7hye9i4eZgZ7SPdqK7jK+rPb6LuYZHlh5EdqESWQVKvLvpLN7eeEacbAcA9wqU+Hj7BVxNz6vZByEiaoTMmuiuyzfOn332GRYtWoRdu3ahW7duRvs1xLfN+cX3E90yzugmIqLGLyoqCr1794aLiwu8vb0xZswYXLp0SadPcXExpk+fDk9PTzg7O2PcuHF64705cCFKIiJqzGbPno3ly5fjp59+woULF/DSSy+hoKAAU6ZMAQBMmjQJc+bMEft/8MEH2LVrF65fv474+Hj861//ws2bN/Hcc8+Z6yNYBYVKv1SJu6PxRPbt7CJsP5NidLtEAmQXKvHh1vNi26W0PCz6+yLOp+Tir9MpOnXA7xUqoVJrkJ5bjAnLj+CHA9cxd3Pli4gSETUFZk101/Yb508//RQffvghduzYgV69ejVEqJUqKimtueXIn0ATEVETEBMTg+nTp+PIkSPYvXs3SkpK8PDDD6OgoEDs8+qrr+Kvv/7Chg0bEBMTgzt37mDs2LFmjLpUJhPdRETUiI0fPx6fffYZ5s2bh+7duyMhIQE7duwQy4UmJSUhJaU84Xrv3j08//zz6NixIx555BHk5ubi8OHD6NSpk7k+glUoUesnukN8XSrdJz1PYXRbblEJ3vzjNFYcMlyX295WilStRHd2YQleXhOPPh9H42Jq6UzuozcyqxM6EVGjZvYpyLNnz8bkyZPRq1cv9OnTB0uWLNH7xrlFixaIiooCAHzyySeYN28e1q5di6CgILGWt7OzM5ydnc3yGdT3V0O2lVp1JRgiIqJq2bFjh87r1atXw9vbG3FxcRg4cCBycnKwYsUKrF27FkOGDAEArFq1Ch07dsSRI0fQt29fc4QNAMjML73J9GSim4iIGqkZM2ZgxowZBrft379f5/XixYuxePHiBoiqcQnydNJJXLvY2yJqbDc8+Nn+Wh0vp6gER29kGd3+xh+n8VCn8rXN7hUqseu87i/lZLbl+QiFSg2ZjZRl2oioyTF7Zram3zh/++23UCqV+L//+z/4+fmJj88++8xcH0FMdDPPTURETVFOTg4AwMPDAwAQFxeHkpISnYWiQ0JCEBgYiNjYWKPHUSgUyM3N1XmYWnnpEuMLQhERERFV5vMnQzGiiy9WPdsbH43pgu2vDECwlxOe7NVS7BPZ0aeSI+iqLMldZrdWYvteYYne9uKS0lnmabnFCPtwD97447TB42TkKzDyy4P4OTax2vEREVkLs8/oBmr2jXNiYmL9B1RDGqE00W0j5belRETUtGg0GsyaNQsPPPAAunTpAgBITU2FTCaDu7u7Tl8fHx/xl1iGREVFYcGCBfUZrli6xNOZM7qJiIiodgI8HPHtv8L02guVavH5x2O74IHTnljw13mdPo/3aIFNJ2/X6f3nbj5rsF2hUuPn2ETkK1T4I+4WPnsiVK/Pkj2Xce5OLuZtOYdJEUEGj3MjowDpucUIb+1ZpziJiBoa5yCbgDijmz8LIiKiJmb69Ok4e/Ys1q1bV+djzZkzBzk5OeIjOTnZBBHqKpvRzdIlREREZGq5xSrxubeLPaY8EKzXZ1JEqzq/T06R/oxuAMjMV0JRUl4/vLhEjXv3r312nE3B4WsZyDYwG7zMn6fu4LmfTuDBz/Zj/A9HcCHF9L+uIyKqT0x0m0BZopszuomIqCmZMWMGtm7din379qFly/Kf6vr6+kKpVCI7O1unf1paGnx9fY0eTy6Xw9XVVedhalyMkoiIiOqLn6u9XpujzEbndbCXU729/908BRSq8kR3yNwd6LVwD2KvZeLFX+Px9PKjUGptzy5U6uz/ym8nsedCeYmUEUsP4sj1TLz4Sxxu3SsEAOQVl+BOdlGt4vti1yXM/j0BgiCgQKHC6GX/YOmeK1Xup1Cpq+xDRAQw0W0SYukSzugmIqImQBAEzJgxA5s2bcLevXsRHKw7WyksLAx2dnaIjo4W2y5duoSkpCREREQ0dLg6sgruL0bJ0iVERERkYm8O74DHe7TAuhfKF97+e+YAneS2m4MdqpojF+DhYLDd19UeA9p5Gd0vPU+hlxRWawRMWH5EfK29iGX3D3Zj9u8JeP/Pc0jJMZy8fuqHI9hxLhULt10AAPRbtBf9Fu0V+2s0AjLyFQb3BUqvG3OLSyAIAr7cexUb42/j3J1cbDiRjFPJ2Vi857LRfQHg2I0sdJ63E8sPXK+0HxERwES3SajvfyHKFY2JiKgpmD59On799VesXbsWLi4uSE1NRWpqKoqKSm943NzcMG3aNMyePRv79u1DXFwcpkyZgoiICPTt27eKo9evrHwuRklERET1w9NZjsXju6OvVm3rVp5O+HvmADzXPxjrX+gLiUSCw28PFbd38HHBh6M76xzHx8Uef83or3d8qQR4bkBro+///M8n8PuJWzWKeWP8baw+nIiIqL2V9svIV6C4RI28++VZjifeAwC8u/ksen20B0evZxrcb+a6BHR7fxfO3M4R25Rqjc7M88q88ccpqDQCFm6/UK3+RNS0MdFtAmpxMUozB0JERNQAvv32W+Tk5GDw4MHw8/MTH+vXrxf7LF68GI8++ijGjRuHgQMHwtfXFxs3bjRj1KV1KgvuLxLF0iVERETUUOztbPDeo53ExR193cpLnKgFARPDW+GXaX3Etqt389G1pRu+ndhT5zjtfV0wqH1zrHy2Fzr4uDRM8PcpVBp0mb9TfG0jkeDglbv47VgSAOCrvVfFbSq1BsUlpddcf566AwD4Wmu7jUSis8aZcD+nYghLxBJRTdiaO4DGQBBYo5uIiJqOym5Gytjb22PZsmVYtmxZA0RUPWULUdrZSOBqz0sgIiIiMr8QXxdIpRIMaNccnk4yZBYoEdDMEQAwrLMvvvtXGHKKlNhw4pa4uOWQEB909ndD+MfRlR3apE7fytFre2bFMfH5yaR7SM8thqezHMOXHoRSpcHa58PF7Rqt60e1IED7B/EFSjWc5YavzVgilohqgnd5JlC2GKWU/wATERFZrLJEdzNHGcuNERERkVlt/U9//HYsCa8+1F5s2/BiBBbvuYIZD7YFAEilEgzvUrqQ9/jegTr7V1zksqH9cFC3ZnaBUo0+H0eje4A7rqbnAwD6f7JP3F6WNwEARYlG53VuUYnxRHclEwqVKg32XEhD39ae/LUeEQFg6RKTKPsHmjO6iYiILFdmQVl9bt4IERERkXl1aeGGhY93hZdz+bohrZs746sJPdDBt+qyJI6y8sSwj6vc4CKVYa2aoYV76cKWLtX4NduPk3pVJ3QAwKnkbIPtCUbatfLaUKjKy8kBwJEK9b1zCksw+L/7sOCvc5XmWX46nIiX18Tjye9j8eR3sZi+Jr78GEUl+O/Oi7ianlf1hyGiRoOJbhMo+wkOf1JDRERkuTLzFQAAT2cmuomIiMi6aSeABQH4ZVq4Xp9AD0f88/YQJC4aicdC/Ss93sE3H0RkJx8EeDiYPFZAd0a3UqVBgUIlvp79+ymdvtvPpiAxsxCr/klEvla/MslZhShUqrDnQhoA4Gp6Po4lZmHbmRSo1KWLXH649TyW7buGyC8OYOSXBxF38159fCwisjBMdNfBvkvpeOK7w7iWXgCg9GdFREREZJmyxBnd8ip6EhEREVkPjZH1U7ST4b6u9gb7AMDE8EAEeJTWBX97eEcAQNcWbiaMsLSGdxlFhUQ3UJoIj7l8F7vPp2HOxjNi+83MQp0+V9LyMODTfeg0byeKVRq99ylQlM4Uj9dKbJ+7k4tJK46a7LMQkeVije46mLLqOADgeGLpP6Cc0U1ERGS5ykqXeLJ0CRERETUCMlsplCoNvF1Kk9jjerbE/+JvidvbejuLz3u2amb0OAsf7yo+f6SrL3a9OhDujnbos9B0i11qlypRqDR6i1t+vusSvtl/rdJj5CtUWHc8WXxtqHxKnqIEbo52QIX0jPb7A8CZWzm4V6jEwPbNq/kJiMgacEa3CUl5NomIiCxWVj4T3URERNR4/Pf/umF4Z18sGleaqF74eBf876V+WPNcOJ7rH4wpDwSJfR9o64WxPVpUeUyJRIL2Pi5o7qz/C7jQAHe9tiXju1c6W9yQ348n43xKrk5bVUluoDTRfTOzoNI+ZTO6q5qGOOrrQ5i08hiStGaME5H144xuE5JyRjcREZHFEhejZI1uIiIiagRGd2+B0d3Lk9f2djYIuz9z+4G2+otTfjG+O0Z19xd/nV4ZiYH8xvoX+iJk7g7x9fF3I9HcRY5hnX3x65GbWLj9QrXiPpaYBQDoE+wBlVqD+KTsau2XmlOMPRfSK+1z7W4+pqw6hjs5xXrbikvU+PPUHew6l6bTP9DTEfsupeOvU3ew4LHOcLG309tXEASUqAXIbMtnOKrUGtjacMYjkSXhX6QJVbYaMBEREZlXVsH9xSg5o5uIiIiaqAc7eOu83vRyv2rtt+HFCNjb2egsVtncpXTWt4PMBs8NCNbp7+Mqx1cTemB4Z1+jx3x5cBvxGNWx8tCNKvu8vCbeYJIbAH44cB1v/nFaXMQSAKasPo6Yy3cxZdVxbIy/jdX/JOrso1Jr8NYfp9Fh7g6Efbgbt+6VzgBfdywJXd7ficNXM6odPxHVPya6TYgzuomIiCwXF6MkIiIiKjemuz96BBqv3V3GUWaD3kEeAIBPxnYDALw1PESnj0QiQURrT/H1r9PCMSrUH+GtPYwet2UzB5SoDS+kaci2MynV7mvIloTbBtu3ny4/7t18he62s6lYfyIZSpUGeQoV+n+yD5NXHsPbG8+guESDN/44Xa33TsstxtX0/NoHT0TVwkS3CXFGNxERkeUSS5dwRjcRERERnOTVq2brKCvv16+tFy58MBwvDW6j1++Tcd0woJ0X1jwXjnY+LgAAua2N0eP6uzugRK0xuC2sVTOdGuOmYGtkYbX1J8oXuDx7Owdrjt6ESq3B1fQ8pGQX6fWPuXxXfK5dygQAFCo1jlzP1PlcgiAg/ONoRH4Rg6V7rhiNr7hEjaPXM6Eyck6IqGpMdJsQE91ERESWSanSIK9YBYClS4iIiIgAwNm+8kT3T1P7oE1zJ3z/TE+ddgeZ4eR1oKcjfpkWrlMfXK6VCG7t5SQ+7+DjAkeZLfq10a8lDgD5xSpkF5ZU+Rlq4lJaXpV94pOy8e6ms+j6/i5EfnEAUX9frLS/S4VzOH/LOTz1wxH8cOC62JaeVz5LfPGey8ioMGu8zOsbTmH8D0fwbTUW5qwtQaj+DHoia8REdy0pVfrfsLF0CRERkWW6V1g6m9tGKoGbg/4CQ0RERERNTSc/10q3D2rfHNGvDUZYK+PlR6qSU1SerH60m5/4fNWU3gCAqf2DDO6nUKl1kuQNrahEXa1+ZYnus7dzcDOzAOuOl84O/z6mPFl9KVU3wV6gUOkd5/rdfGy9X0Llu5jKE91X0/PwR9ytSpPWd7KLoNHobv/vzovot2gv0nMN1zAnagyq9zsV0mPoHyYutktERGSZMvNLE93NHO0g5S+wiIiIqAn77fm+OJl8D4+F+tf7ewU3L5/FPW1Aa2xKuA0JJPC+vwil3NYGEa09EXs9U2e/hY93RZCXEy6k5OLUrRyx3d3RDv3aeCL+ZjZS7ydsFz7eBc5yW7z1v9MoLtGflPjaQ+3x+e7Leu3tfZxxOa1udbMlkODxb/7ByaRsnfbQAHcAQKFShRsZBTrbyn5lqG3q6uPi86quVSO/OACgtGyK9n/DAoUK09fGQwJg36W7GNezJT4c0xlSiQT2djZYtq80gf7N/mt4/7HO1f2IRFaFie5ayjeU6OaMbiIiIouUWVD6E1HW5yYiIqKmLqKNJyLaeFbd0QQGtWuOr5/ugW4t3OHmYIddswbBRiqBrdZMwU//rxve23wWT/RqiZyiEgzr7Asv59JE+JYZ/dH2ne1Q3Z+dHPfeQ7CRSiAIAoLnbAcAhLZ0R5cWbvh0xyXcrlBTe2yPFpgxpC3kdlJcScvHG8M7oM/CaABAUlYhXo1sj8V79JPgxmz9T388+tUh8fWhqxkG+x28koFFf1/Eqn9uQFGhIkD0hXTY2kjg7WIvXpsmZhaK2w1VCyhRa/Da76fg41q+qPr+S+lo5+2MhdsuoEegO2Q2Uuy/VF4//H/xt3Dgyl3Y20kR8/qDYnv2/V86EjVGTHTXkpujHT4d1w1v/q98hV0JE91EREQWKYsLURIRERE1OKlUgke7lc86NlTfO8DDET9N7WP0GK8+1B7/3XkJE/oEimujSSQS7Hp1IJKzCtGlhRsAQKm1iOMbwzog7uY9fPJ/3SCRSPDCwPLFM8f2bIGN8bfxRFgAHu7sU6NEd9l7VYexEiSL91wW33PpU931ZtaXJfLXHktC9IV0zBjSFmO/Oax3nI3xt7Ex/jYA4wn3u/frg5ctyg4AV+/WbRa7tnyFCgv+PIdHQ/0xqH1zkx2XqLaY6K4lV3s7PNk7AN8duIbrd0t/hsLFKImIiCxTWekSTyd5FT2JiIiIyJK8NKgNBrZrjhA/F5329j4uaO9T3uaolUSf/mBbo8f77P9CMbKrH8JaNYOrvR36BHvg2I2sasez/oW+GP/DkRp8AuNmrkvQq0UulQCr/knEB1vPAwD2Xkyv8/uk5pTX5T57Oxd3sovg7+6Ay2l52JJwG/8e1Aau9vrr2Gg0QqWlVH6IuYYNcbewIe4WEheNrHOc2tQagXk2qjFWla4jZ3n5dwX8AyQiIrJMnNFNREREZJ2kUgm6tnSDXRULo43oUrrY5eSIVlUeb2hHH7g7yiCVSvDb832x7/XBev383ewN7h/e2hPbXxlQveCroWxWdhmNAKw4dMNkxweA6xm6s7jP38kFAIz88iCW7buGj7ddQIlaA6VKg53nUrEl4TZ+iU1E6Ae7kJCcbfS42iVX3vrjNM7dydHZXqLW1KpUyrk7Oej2/k6dRT1rouJCnJamuEStV2aHTIMzuutIO9FtqI4SERERmV8mE91EREREjdpbwzvguQHBYn3v6rKRShDs5aTX/trDHVCoVKF1c2e8vCYeT4S1FLcFeDjUOd4yu86nAQBkNlIo1RpxgoY2BzsbvPZwe3y07UKt3mPmugSd18/9fAJhrZqhRF2aED52Iwv//iXO4OzxN/84hV2vDjJ4XFub8jzY+hPJ+CP+Fq59/IjYVnbMBY91xuR+QdWO991NZ1GgVCPq74v496A2Ve+gZcbaeCQkZ2PXqwPhKDN/2rNIqYZSrYGbgx3yFSpcSMnF3M1ncTE1DztnDUQHX5eqD0LVxhnddaT905gqvlwkIiIiM8m6vxillzMT3URERESNkUQiqXGSuzLernI8ExGEB9p6IX7uQ3jv0U7iNhd7O8x+qD1kNlIsn9QLv04Lh7ujfumPmhjTw99gu4u9LY69OxQD2pm2BnbczXvi8+sZBUZLpFxOy9ebIa3RCBAEAUVKtU67WiPgQkouBEHAsRtZ4jHn/3kOiRkF+O/Oi9WarV6i1hjdVlyixtd7r+BKWp7B7VtPp+DWvSLsu3hXp10Qaj/Luy77Dv5sH0IX7EJecQkmrzyGJ76LxcXUvPux3qn1ceOT7uGpH2Jx9nZO1Z2bEPN/tWHl5LbliW7O6CYiIrJM5aVLWKObiIiIiPT5utojNbe8lnW3Fu7ic0Olal8Z2g7TH2wrbtv/+mCcuZ2DZ1YcAwCsfT4c5+/kYt3xZNzJLsJPU/tg3bFk/C/+lsH37+jnivY+zricVlpmxNNJhri5D0EQBEgkEvi4mq8cxw8Hr8PX1R4Lt1/A2J4tsPt8GoI8nZCZr9DrO2LpQXw4ujPmbjmn037gyl0s21daiqRrCzf0CfZAZr4CX+29inuFSoT4uuKlwW2Qr1DpJbqTswrx71/i0CfYA3I7Kb6PuY7vYq7j7IJhYh+NRoCxtNyd7CKM/eYwJoYH4j9D2xnss/NcKq6m5+PlwW0g0TrQlbQ8PPXDEbw0uA2eG9AaALAl4TYCPRzRI7BZpedNpdYgLbf0HJ2/k6vz5QIAqOpQYuWpH45AqdJg8spjiJv7UK2P09gw0V1Hcrvyadys0U1ERGSZWLqEiIiIiCqzY9YAJGcVoXVzJxSXqOFWjRna2nkgd0cZApo5iq97BjZDvzZeeLZfEApL1HC1t0PvIA+dRPf/hbXEH3Glrzv5ueKnqX0QEbUXAMT3L0u6ujkYjmfHrAHIylfi6R+P6m1zsLPB0XeHotv7u6r8LJVZ9PdF8fn3MdcBANfvFhjt/8mOS3pt87QS3xtOJKNPsAfWHU/G6sOJAIAtuAMvZxne//McCrRmiguCgHc2ncH5lFycT8lFm+alZWbyFSr8ePA6bKQSFChU+D7mOn6a1kfcTzvpvXj3ZaTmFuPz3ZcNJroFQcC/f4kDUFofffWU3ujW0h0A8MHW88gsUOKjbRfw3IDWuJCSK5aCqWoBznyFSnxuKKmtriTRLQgC7uQUw9/NHhn5SjjIbHTKJytVpV8GZBooddOUMdFdR9ozupnoJiIiskxlM7o9WbqEiIiIiAxwd5TB3bH0WtFJXrt0WStPRwzu0BxuDnawtyvNF9naSOGqVet26VPd8c2+a/jmXz0BAPE378HN0Q6hAe7iPoB+YltiYLryO4+EIMTXFQCw6eV++GDreZxMyha3R43tCld7O/Rr44nD1zLh4yoXZxjXJ+0EryEb4m6hZTNHLN5zWaf9jT9O6/X9dOclpGnNtE/NKX9esWb52G8Oi88198uNFCpVKFAajie7UIlx3x5GRz9XsS2rQImJPx7FqXkPQyqVQFGiO7s8PU+h07fiRJpDVzLw2/EkfPBYZ2Tklyeh84pL9N5fqdLg7O0chPi6wLZCPeQ1R5Pw3uazeDo8EH+dKi1xsvGlfmjnU7ua3lfT8/DcTycw/cG2eKJXQK2O8fXeK3B1sMOkiKBa7d8QmOiuI3utGd2G/tEhIiIi81KpNcguLL2w5IxuIiIiIqovEokEq6f0qbTP6O4tMLp7C/H13tcHG+wXen9GcWUGtfcWn/cIbIa+rT11Et1li0UueKwzDlzJwMOdfDDg031VHrchVExyG/Pt/ms6rwsq1AU3Jmr7Rey/dBd/JtyBUqsUStTfF9CymSP+FR6INUeTcO1uAa5VmJ2eV6zCoM/2oXuAbmmSQqUKRVpJ81PJ2XgwpPS/wYpDNyCVAAv+Og8AcJLZ4PcT5bP3tRP0ZdYcvYnVhxMxJMQbK5/trbPtvc1nAQBrjyaJbdN+OoHo1wbBrkJSPK+4BC72lf8C4dcjSUjMLMQbf5zGiK5+OrPDjSlUqiCzkcLWRopb9wrx2a7S/2ZP9wmErY0U2YVKLI2+gv8La4nO/m7ifsUlap0vbRoSE911pP0fzoaJbiIiIotz736SWyIBmjky0U1ERERElmv1lN7YfPI2Xnu4vd625ZN64Y+4ZLw5PATFJWp08NWd3dusQrkVW2lpQrSdjwva+bhUe1FFma1ULI0R4OGA5Kwio317BrojXiu5XpnHe7RAj0B3nTIm9eV2dpFYFkZbWemVrHwl7hUaL/uRnFWE5Kwi9GpVnuzuPH8ntE/hV3uvoGerZpixNh4Hr2To7J+YUajz+v37CXBtJerSg+29mI6j1zNx7W4BOvq5GK39nZRViF9ib6Ktt7NO++PfHMa2V/rrVJ3QVvG/+7bTdzC+d6DBvgBw+lY2Fu++jH2X7mJ8rwA83NkHh69litujL6ZjWGdfLNx2ARvibmHVP4liGZeF287jlyM38deM/hAABHs56SXm61PDvVMjJbfVrtFtxkCIiIga0IEDBzBq1Cj4+/tDIpFg8+bNOtsFQcC8efPg5+cHBwcHREZG4sqVK2aJNbOg9OeF7g52LDNGRERERBZtcAdvLHmqh8EZug918sH3z/RCm+bOOjNoy4zt2RLdA9zF196uuguxSyQSfP5EqE7bjlkD9I7zypC24vOlT/UQn7tUmAXs5SzDlxN6oDJLn+qOD8d0wbF3hmLx+O6YGN6q0v4NZfGey2J98Mqc0FpAsuL3BPFJ2fhkx0W9JDcAHEvMqlE84384gnc2ncHj3xzGqK8OGe334bbzmLTymE7b1fR8/HjwBg5euavTfq9AiT4L9+C1DaeQobVw6Fv/O4Oov3XLvpy+lY2hn+/H78eT8djX/2DfpdJjrT+RjGk/ncCKQzfEvmX1zBOSs/XiW37wBopLNBi97B88+uUhLN5dvZn7psIZ3XWkPaNbyhndRETURBQUFCA0NBRTp07F2LFj9bZ/+umn+PLLL/HTTz8hODgYc+fOxbBhw3D+/HnY29s3aKxZ+VyIkoiIiIgaPy9nOTZPfwBbEm4jOasQPQ3MDB4X1hIjuvqi07ydAIDWXs56ff4vLAC+bg5o7iJHay8nsb1nq2aIuVyaAN32Sn8x2f5c/2D8qJUIBYAnwlpi/mOd9UpkaE88aevtjP8MaYvBHbzR/5O9cLCz0amBrW1AOy+DCWVz0y4tYipnbucY3WZsUv5/d5YvAPrS4DYoUWnQ3EWO9DwFNsbfRkiF2f/fx1xHe28XjAtrCQB47fdTuHa3AG/+T79OuiFqjaA3iWjfpXTxeeH9EjMnk7Kh0QiQNtCEIya668heZ0Y3E91ERNQ0jBgxAiNGjDC4TRAELFmyBO+99x5Gjx4NAPj555/h4+ODzZs346mnnmrIUMWVyD2d5FX0JCIiIiKyfto1wA1xlNliz+xBsLORQGYrxY5ZA3DwcgbyFCr0CHCHr5s9/u9+AlRbRBtPMdHdyrM8AT7nkY5ionvbK/3R1tvZaBkNAHh+QDB+P3ELq57tjQAPRwBA9GuDILORYkvCHWw8eRun7s8Wfmt4COxsJJjQJxCv/X4KO86lVvs8/PFiBFb+cwPbz1Rvny3TH0CQlxP6f7IXecWVL6ipzc5Ggog2Xjhw+W7VnRtAxbrmAHAxNU+v7bUNpxCXdA+RHb1x7W5+jd5j5rqTOnnQxIwCTFl1XK/f50+GNliSG2DpkjqTa9foZqKbiIgIN27cQGpqKiIjI8U2Nzc3hIeHIzY21uh+CoUCubm5Og9TyCrgjG4iIiIiIm1tvZ3FZHWIryueH9gasx9qLy6uqG3h410wKtQfUx8IxifjumLx+FCdmdo2UglmP9QeUx4IQic/10qT3ADw7shOODn3ITHJDQDeLvZwd5Rhcr8gbJn+gNju726P5wa0hpPcFv3aeho8XpCnI84tGIb3R3XSae8V5IEl43tg3qPl7U4y47H5uzvAzcEO0a8NEts6+bni0kfD0TPQ3eh+/x7YBl8/3cPglwPa3hzeAQ918oHcVopJEa30ZlnXxhvDOtRp/7VHkzD791PQVK98u2jr6RSd2eVDv4gx2M/TuWHvwTiju47s7cq/K2DpEiIiIiA1tXTGhI+Pj067j4+PuM2QqKgoLFiwwOTxlM3o9mjgiywiIiIiosZgYngrsba2sUUMXxnarkbHrGqW78OdfHD2dg4iO5bfUzzdJxAlagEd/Vzw9PKj92MLxLsjO8JRZotJEUG4nJ6PtUeT8Gy/IAClC2tO7R+MD7aWLgY5pKMP/jp1x+B7li3m6e1ij6VPdcdPhxPx5YQekNvaoJO/q9FFN6f1D4arvR0+eyIU3QPc8d7ms+K2Ae28cCe7CIIAvDCgNWxtpBAEAZL7OcRfjtzE3M1n8en/dUPPwGY4kZiF7w9cx42MAqPnJtjLCaO6+cHWRorpD7ZFex8XTF8TD6VaY7D/yG5+GNXND24OMkxYfkRve3Zhifg8sqMP9lxIM/re2s6nlE9MUhvJlFf1pYepMdFdR/a2nNFNRERkCnPmzMHs2bPF17m5uQgICKjzcbPuL0bpyRndRERERERW4ftnwqDWCLC1KZ9gamsjxbT+wVBpJXSHdvSGo6w0vSmVSvDx410x48G28HPTXRcoPNgDR29k4d8DW+OdR0JQpFQjPU+B5QeuI/piunj8MqO7t9ApAfNM3yBcTstH32APPB3eCn2jogEAj3bzQzOt+4x/9W2FFs0csOtcGkZ390fXFm6Q2UohCOXHl2hNlH2mbys80sUXns6lZRbbejtDIildMNKY9f/uC2+X8s/3UCcfRL82CAM+3Wewf1hgMwzv4if+0tWYnoHu+HFyL0xaecxiyrDUFBPddSTnjG4iIiIdvr6+AIC0tDT4+fmJ7WlpaejevbvR/eRyOeRy09fRzhJrdDPRTURERERkDSQSCWxtDOfZbG2k+Peg1ribq8DAds31tvu7O+i1rXy2N+7mKRCktbhm6+bO+O1Y9RaT7ODrgt//HSG+9nCSIatAiWGdffX6PtjBGw920C8BY0xZkrvME2EBaOvtAi9nGQb9dz8AYHR3f2xJuIOhId46Se4yLZuVf+Z23s7IyFfg3v2Z2g+09QIAuDvYoZ23M5RqDRaN7aY3u7t189KFSZeM744hn+/HgHbNMaCtF86n5GL14cQqP8ej3fzQ2ssJX+69Wu3PbmpMdNdR2bdGACCzZaKbiIgoODgYvr6+iI6OFhPbubm5OHr0KF566aUGjyczv6x0CRejJCIiIiJqDOaM6Fij/k5yWzjJ9dOgE/oEYkvCHfQOalaj421/ZQDO3M5BZMfqJ7SrSyqVIKxVaTw7Zw2E3FaKIC8nvDuyI5o5Gp68I5FIsOzpnjh3JwdvDOsAiUSCtUeT4Odmjw73a4FLpRJse2UAgNKSLttfGQAnuY2YTO9/PyHu4STDsXciYWcjEWefP9LVDwu3X0Cb5k7YdjoFLZs5IC1XgWn9g/H7iWTMH9UZw7v4IqewBBvibiElpxifjOtq8nNTFSa666hnYDM83qMFStQa9G1tuCg+ERFRY5Ofn4+rV8u/qb9x4wYSEhLg4eGBwMBAzJo1Cx999BHatWuH4OBgzJ07F/7+/hgzZkyDx9rexwXFKg1auOvPfCAiIiIioqarb2tP7Jk9EC3cHavurMXXzR6+bvV/f9FBa8FKQzO5tY3s5oeR3cp/Uft0uH49dZlteWWKTv6uAIBPxnXF+Tu5Ovtq9wOAPsEe4iKhnz8RqlN+5dWH2ovP3RztEDtnaKVx1icmuutIZivF4vHdzR0GERFRgzpx4gQefPBB8XVZbe3Jkydj9erVePPNN1FQUIAXXngB2dnZ6N+/P3bs2AF7+4ZPNn84pkuDvycREREREVmHtt4uVXdqxIwtMGqMxIJLNzPRTURERDU2ePBgCILhlbWB0oufDz74AB988EEDRkVERERERERNlbTqLkRERERERERERERElouJbiIiIiIiIiIiIiKyakx0ExEREREREREREZFVY6KbiIiIiIiIiIiIiKwaE91EREREREREREREZNWY6CYiIiIiIiIiIiIiq8ZENxERERERERERERFZNYtIdC9btgxBQUGwt7dHeHg4jh07Vmn/DRs2ICQkBPb29ujatSu2b9/eQJESERERERERERERkaUxe6J7/fr1mD17NubPn4/4+HiEhoZi2LBhSE9PN9j/8OHDmDBhAqZNm4aTJ09izJgxGDNmDM6ePdvAkRMRERERERERERGRJZAIgiCYM4Dw8HD07t0bX3/9NQBAo9EgICAA//nPf/D222/r9R8/fjwKCgqwdetWsa1v377o3r07vvvuO73+CoUCCoVCfJ2bm4uAgADk5OTA1dW1Hj4RERE1dbm5uXBzc+NYU0c8j0REVJ84zpgGzyMREdWnmowztg0Uk0FKpRJxcXGYM2eO2CaVShEZGYnY2FiD+8TGxmL27Nk6bcOGDcPmzZsN9o+KisKCBQv02nNzc2sfOBERUSXKxhgzf5ds9crOH8dsIiKqDxyvTYPjNRER1aeajNdmTXRnZGRArVbDx8dHp93HxwcXL140uE9qaqrB/qmpqQb7z5kzRycxfvv2bXTq1AkBAQF1jJ6IiKhyeXl5cHNzM3cYVisvLw8AOGYTEVG94nhdNxyviYioIVRnvDZrorshyOVyyOVy8bWzszOSk5Ph4uICiURSp2OXlUFJTk62up9oWWvs1ho3wNjNwVrjBhi7OZgybkEQkJeXB39/fxNF1zT5+/ubZMy21v8nzYXnq+Z4zmqG56tmeL5qpibni+O1aZhqvAas9/93a40bYOzmYK1xA4zdHKw1bsB0sddkvDZrotvLyws2NjZIS0vTaU9LS4Ovr6/BfXx9fWvUvyKpVIqWLVvWLmAjXF1dre5/tjLWGru1xg0wdnOw1rgBxm4OpoqbM8PqztRjtrX+P2kuPF81x3NWMzxfNcPzVTPVPV8cr+uO99jlrDVugLGbg7XGDTB2c7DWuAHTxF7d8Vpap3epI5lMhrCwMERHR4ttGo0G0dHRiIiIMLhPRESETn8A2L17t9H+RERERERERERERNS4mb10yezZszF58mT06tULffr0wZIlS1BQUIApU6YAACZNmoQWLVogKioKADBz5kwMGjQIn3/+OUaOHIl169bhxIkT+OGHH8z5MYiIiIiIiIiIiIjITMye6B4/fjzu3r2LefPmITU1Fd27d8eOHTvEBSeTkpIglZZPPO/Xrx/Wrl2L9957D++88w7atWuHzZs3o0uXLg0eu1wux/z583VqgFsLa43dWuMGGLs5WGvcAGM3B2uNm6rG/7Y1w/NVczxnNcPzVTM8XzXD82XdrPW/n7XGDTB2c7DWuAHGbg7WGjdgntglgiAIDfZuREREREREREREREQmZtYa3UREREREREREREREdcVENxERERERERERERFZNSa6iYiIiIiIiIiIiMiqMdFNRERERERERERERFaNie5aWrZsGYKCgmBvb4/w8HAcO3bM3CHhwIEDGDVqFPz9/SGRSLB582ad7YIgYN68efDz84ODgwMiIyNx5coVnT5ZWVmYOHEiXF1d4e7ujmnTpiE/P79e446KikLv3r3h4uICb29vjBkzBpcuXdLpU1xcjOnTp8PT0xPOzs4YN24c0tLSdPokJSVh5MiRcHR0hLe3N9544w2oVKp6jf3bb79Ft27d4OrqCldXV0RERODvv/+2+LgrWrRoESQSCWbNmmXxsb///vuQSCQ6j5CQEIuPu8zt27fxr3/9C56ennBwcEDXrl1x4sQJcbul/p0GBQXpnXeJRILp06cDsNzzrlarMXfuXAQHB8PBwQFt2rTBhx9+CO11mC31nJPpWOKYbQlMcd3QlJjqeqWpMMU1UlNW22uzpsIU14NkeSxxvOY9Nu+xa4v32LzHroy13l8DVnCPLVCNrVu3TpDJZMLKlSuF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uVwuhISECD/88IPOdkv9OxUEQdi5c6cAQC8eQbDc856bmyvMnDlTCAwMFOzt7YXWrVsL7777rqBQKMQ+lnzOyTQsccy2BKa4bmhKTHW90lSY4hqpqavNtVlTYYrrQbI8ljhe8x6b99h1wXts3mNXxhrvrwXB8u+xJYIgCHWbE05EREREREREREREZD6s0U1EREREREREREREVo2JbiIiIiIiIiIiIiKyakx0ExEREREREREREZFVY6KbiIiIiIiIiIiIiKwaE91EREREREREREREZNWY6CYiIiIiIiIiIiIiq8ZENxERERERERERERFZNSa6iYiIiIiIiIiIiMiqMdFNRCYRFBSEJUuWmDsMIiIiqgLHbCIiIsvH8Zqo5pjoJrJCzz77LMaMGQMAGDx4MGbNmtVg77169Wq4u7vrtR8/fhwvvPBCg8VBRERkDThmExERWT6O10SNg625AyAiy6BUKiGTyWq9f/PmzU0YDRERERnDMZuIiMjycbwmanic0U1kxZ599lnExMRg6dKlkEgkkEgkSExMBACcPXsWI0aMgLOzM3x8fPDMM88gIyND3Hfw4MGYMWMGZs2aBS8vLwwbNgwA8MUXX6Br165wcnJCQEAAXn75ZeTn5wMA9u/fjylTpiAnJ0d8v/fffx+A/s+qkpKSMHr0aDg7O8PV1RVPPvkk0tLSxO3vv/8+unfvjl9++QVBQUFwc3PDU089hby8vPo9aURERGbAMZuIiMjycbwmsm5MdBNZsaVLlyIiIgLPP/88UlJSkJKSgoCAAGRnZ2PIkCHo0aMHTpw4gR07diAtLQ1PPvmkzv4//fQTZDIZ/vnnH3z33XcAAKlUii+//BLnzp3DTz/9hL179+LNN98EAPTr1w9LliyBq6ur+H6vv/66XlwajQajR49GVlYWYmJisHv3bly/fh3jx4/X6Xft2jVs3rwZW7duxdatWxETE4NFixbV09kiIiIyH47ZRERElo/jNZF1Y+kSIivm5uYGmUwGR0dH+Pr6iu1ff/01evTogY8//lhsW7lyJQICAnD58mW0b98eANCuXTt8+umnOsfUrkUWFBSEjz76CC+++CK++eYbyGQyuLm5QSKR6LxfRdHR0Thz5gxu3LiBgIAAAMDPP/+Mzp074/jx4+jduzeA0sF69erVcHFxAQA888wziI6OxsKFC+t2YoiIiCwMx2wiIiLLx/GayLpxRjdRI3Tq1Cns27cPzs7O4iMkJARA6Te8ZcLCwvT23bNnD4YOHYoWLVrAxcUFzzzzDDIzM1FYWFjt979w4QICAgLEARgAOnXqBHd3d1y4cEFsCwoKEgdgAPDz80N6enqNPisREZE145hNRERk+TheE1kHzugmaoTy8/MxatQofPLJJ3rb/Pz8xOdOTk462xITE/Hoo4/ipZdewsKFC+Hh4YFDhw5h2rRpUCqVcHR0NGmcdnZ2Oq8lEgk0Go1J34OIiMiSccwmIiKyfByviawDE91EVk4mk0GtVuu09ezZE//73/8QFBQEW9vq/5nHxcVBo9Hg888/h1Ra+oOP33//vcr3q6hjx45ITk5GcnKy+I3z+fPnkZ2djU6dOlU7HiIiosaEYzYREZHl43hNZL1YuoTIygUFBeHo0aNITExERkYGNBoNpk+fjqysLEyYMAHHjx/HtWvXsHPnTkyZMqXSAbRt27YoKSnBV199hevXr+OXX34RF9DQfr/8/HxER0cjIyPD4M+tIiMj0bVrV0ycOBHx8fE4duwYJk2ahEGDBqFXr14mPwdERETWgGM2ERGR5eN4TWS9mOgmsnKvv/46bGxs0KlTJzRv3hxJSUnw9/fHP//8A7VajYcffhhdu3bFrFmz4O7uLn6LbEhoaCi++OILfPLJJ+jSpQvWrFmDqKgonT79+vXDiy++iPHjx6N58+Z6C20ApT+P2rJlC5o1a4aBAwciMjISrVu3xvr1603++YmIiKwFx2wiIiLLx/GayHpJBEEQzB0EEREREREREREREVFtcUY3EREREREREREREVk1JrqJiIiIiIiIiIiIyKox0U1EREREREREREREVo2JbiIiIiIiIiIiIiKyakx0ExEREREREREREZFVY6KbiIiIiIiIiIiIiKwaE91EREREREREREREZNWY6CYiIiIiIiIiIiIiq8ZENxERERERERERERFZNSa6iYiIiIiIiIiIiMiqMdFNRERERERERERERFbt/wFAVe7fNzMdeAAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ],
      "source": [
        "fig, axes = plt.subplots(1, 3, figsize=(18,4))\n",
        "\n",
        "# Plot Train Accuracy\n",
        "axes[0].plot(acc_hist)\n",
        "axes[0].set_title(\"Train Set Accuracy\")\n",
        "axes[0].set_xlabel(\"Iteration\")\n",
        "axes[0].set_ylabel(\"Accuracy\")\n",
        "\n",
        "# Plot Test Accuracy\n",
        "axes[1].plot(test_acc_hist)\n",
        "axes[1].set_title(\"Test Set Accuracy\")\n",
        "axes[1].set_xlabel(\"Iteration\")\n",
        "axes[1].set_ylabel(\"Accuracy\")\n",
        "\n",
        "# Plot Training Loss\n",
        "axes[2].plot(loss_hist)\n",
        "axes[2].set_title(\"Loss History\")\n",
        "axes[2].set_xlabel(\"Iteration\")\n",
        "axes[2].set_ylabel(\"Loss\")\n",
        "\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Nj7skndR0I8m",
        "outputId": "2ea12ea2-6241-4f69-db6d-c3c794f75fa0"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Test Set Accuracy:  85.546875 %\n"
          ]
        }
      ],
      "source": [
        "# Evaluate Test Set Accuracy\n",
        "correct = 0\n",
        "total = 0\n",
        "\n",
        "for i, (data, targets) in enumerate(iter(test_loader)):\n",
        "  data = nn.functional.interpolate(data, size=(2, 32, 32))\n",
        "  data = data.to(device)\n",
        "  targets = targets.to(device)\n",
        "  spk_rec = forward_pass(net, data)\n",
        "  correct += SF.accuracy_rate(spk_rec, targets) * spk_rec.size(1)\n",
        "  total += spk_rec.size(1)\n",
        "\n",
        "print(\"Test Set Accuracy: \", (correct/total) * 100, \"%\")"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "provenance": [],
      "gpuType": "T4",
      "include_colab_link": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    },
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "ab87bfd9c02540f58c277f34bf624b84": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_449eecdf6da24230adc13f0316e005a4",
              "IPY_MODEL_c1964cca2dd34ee6adeebc592d3d0e8f",
              "IPY_MODEL_a310e770aace454686dc70c1e6f04474"
            ],
            "layout": "IPY_MODEL_61016fb4e16346f7a12a03f2a5a5c669"
          }
        },
        "449eecdf6da24230adc13f0316e005a4": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_5f23795f6bc44987bb3f81ac428b0356",
            "placeholder": "​",
            "style": "IPY_MODEL_8041b1851a1e462d94c0eb24963d4a6a",
            "value": " 66%"
          }
        },
        "c1964cca2dd34ee6adeebc592d3d0e8f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_322859851f804d67a53b357e63a8227e",
            "max": 2443675558,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_44fa051f61a14aef894a656887ea3f28",
            "value": 1610961920
          }
        },
        "a310e770aace454686dc70c1e6f04474": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_8d0fa726820b47698b80e8eb31b7be41",
            "placeholder": "​",
            "style": "IPY_MODEL_c9285a1279ce44b3ba3ad73f70c6c86f",
            "value": " 1610961920/2443675558 [01:39&lt;00:40, 20390929.04it/s]"
          }
        },
        "61016fb4e16346f7a12a03f2a5a5c669": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "5f23795f6bc44987bb3f81ac428b0356": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "8041b1851a1e462d94c0eb24963d4a6a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "322859851f804d67a53b357e63a8227e": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "44fa051f61a14aef894a656887ea3f28": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "8d0fa726820b47698b80e8eb31b7be41": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c9285a1279ce44b3ba3ad73f70c6c86f": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        }
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}